2016-10-13 76 views
0

我创建了一个龙卷风阴谋,灵感来自here。它具有在y轴上标记的输入变量(a1,b1,c1 ...)及其相应的相关系数。请参见下面的PIC:Python:连接列表值与数组值

enter image description here

然后我排序的相关系数的方式,而不失去其符号中的最高绝对值获取下一个最高等第一绘图,然后。使用sorted(values,key=abs, reverse=True)。见下面

enter image description here

结果如果你注意到,在即使棒在绝对降序排序第二PIC,y轴标签仍保持不变。

问:如何使y轴标签(变量)连接到相关系数,使其始终与其相关系数相对应。

下面是我的代码:

import numpy as np 
from matplotlib import pyplot as plt 

#####Importing Data from csv file##### 
dataset1 = np.genfromtxt('dataSet1.csv', dtype = float, delimiter = ',', skip_header = 1, names = ['a', 'b', 'c', 'x0']) 
dataset2 = np.genfromtxt('dataSet2.csv', dtype = float, delimiter = ',', skip_header = 1, names = ['a', 'b', 'c', 'x0']) 
dataset3 = np.genfromtxt('dataSet3.csv', dtype = float, delimiter = ',', skip_header = 1, names = ['a', 'b', 'c', 'x0']) 

corr1 = np.corrcoef(dataset1['a'],dataset1['x0']) 
corr2 = np.corrcoef(dataset1['b'],dataset1['x0']) 
corr3 = np.corrcoef(dataset1['c'],dataset1['x0']) 
corr4 = np.corrcoef(dataset2['a'],dataset2['x0']) 
corr5 = np.corrcoef(dataset2['b'],dataset2['x0']) 
corr6 = np.corrcoef(dataset2['c'],dataset2['x0']) 
corr7 = np.corrcoef(dataset3['a'],dataset3['x0']) 
corr8 = np.corrcoef(dataset3['b'],dataset3['x0']) 
corr9 = np.corrcoef(dataset3['c'],dataset3['x0']) 

np.set_printoptions(precision=4) 
variables = ['a1','b1','c1','a2','b2','c2','a3','b3','c3'] 
base = 0 
values = np.array([corr1[0,1],corr2[0,1],corr3[0,1], 
        corr4[0,1],corr5[0,1],corr6[0,1], 
        corr7[0,1],corr8[0,1],corr9[0,1]]) 
values = sorted(values,key=abs, reverse=True) 
# The y position for each variable 
ys = range(len(values))[::-1] # top to bottom 
# Plot the bars, one by one 
for y, value in zip(ys, values): 
    high_width = base + value 
    #print high_width 

    # Each bar is a "broken" horizontal bar chart 
    plt.broken_barh(
     [(base, high_width)], 
     (y - 0.4, 0.8), 
     facecolors=['red', 'red'], # Try different colors if you like 
     edgecolors=['black', 'black'], 
     linewidth=1) 
# Draw a vertical line down the middle 
plt.axvline(base, color='black') 
# Position the x-axis on the top/bottom, hide all the other spines (=axis lines) 
axes = plt.gca() # (gca = get current axes) 
axes.spines['left'].set_visible(False) 
axes.spines['right'].set_visible(False) 
axes.spines['top'].set_visible(False) 
axes.xaxis.set_ticks_position('bottom') 
# Make the y-axis display the variables 
plt.yticks(ys, variables) 

plt.ylim(-2, len(variables)) 
plt.show() 

提前感谢

+3

类似'zip(* sorted(zip(variables,values),key = lambda x:abs(x [1])))[0]' –

+0

@PatrickHaugh:您的建议奏效。我只需要扭转顺序以获得所需的结果。感谢您对此的帮助。谢谢! –

回答

0

使用内置的ZIP功能 - 返回一个元组的列表,其中第i元组包含来自第i个元素每个参数序列或迭代。但是意识到返回的列表被缩短到最短参数序列的长度。