Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 列线图定制_Python_Matplotlib - Fatal编程技术网

Python 列线图定制

Python 列线图定制,python,matplotlib,Python,Matplotlib,目前,我正试图绘制一个图表,显示运行中某些设备的等级,在几天内,等级从1到300(1是最好的,300是最差的)(df列)。我想做的是一个类似于以下的图表: 我得到的是: 我想让线倾斜,因为它是在第一个图形上,而不是垂直的,但我不知道如何。我找到了这个问题的第一张图的基础,并从那里开始编写代码,这就是我最终得到的: import matplotlib.pyplot as plt import matplotlib.ticker as plticker import numpy as np d

目前,我正试图绘制一个图表,显示运行中某些设备的等级,在几天内,等级从1到300(1是最好的,300是最差的)(df列)。我想做的是一个类似于以下的图表:

我得到的是:

我想让线倾斜,因为它是在第一个图形上,而不是垂直的,但我不知道如何。我找到了这个问题的第一张图的基础,并从那里开始编写代码,这就是我最终得到的:

import matplotlib.pyplot as plt
import matplotlib.ticker as plticker
import numpy as np

def energy_rank(data, marker_width=.5, color='blue'):
    y_data = np.repeat(data, 2)
    x_data = np.empty_like(y_data)
    x_data[0::2] = np.arange(1, len(data)+1) - (marker_width/2)
    x_data[1::2] = np.arange(1, len(data)+1) + (marker_width/2)
    
    lines = []
    lines.append(plt.Line2D(x_data, y_data, lw=0.8, linestyle='dashed', color=color,alpha=1,marker='.'))
    for x in range(0,len(data)*2, 2):
        lines.append(plt.Line2D(x_data[x:x+2], y_data[x:x+2], lw=2, linestyle='solid', color=color))
    return lines

head = 8
dfPlot = vazio.sort_values(dia, ascending = True).head(head)
data = dfPlot.to_numpy()

colorsHEX=('#FE5815','#001A70','#2F5C22','#B01338','#00030D','#2DE1FC','#2E020C','#B81D8C')

artists = []
for row, color in zip(data, colorsHEX):
    artists.extend(energy_rank(row, color=color))


eixoXDatas = pd.to_datetime(list(vazio.columns),format='%d/%m/%y').strftime('%d/%b')    

fig, ax = plt.subplots()
plt.xticks(np.arange(len(vazio.columns)),
           eixoXDatas,
           rotation = 35,
           fontsize = 14)
plt.yticks(fontsize = 14)

plt.xlabel('Dias', fontsize=18)
plt.ylabel('Ranking', fontsize=18)

fig = plt.gcf()
fig.set_size_inches(16, 8)

for artist in artists:
    ax.add_artist(artist)
ax.set_ybound([0,15])
ax.set_ylim(ax.get_ylim()[::-1])
ax.set_xbound([-0.1,float(len(vazio.columns))+2.5])
plt.yticks(np.arange(1,16,step=1))
ax.grid(axis='y',alpha=0.5)

lastDay = vazio.sort_values(vazio.iloc[:,-1:].columns.values[0], ascending = True).iloc[:,-1:]
lastDay = lastDay.head(head)

for inverter, pos in lastDay.iterrows():
    ax.annotate(inverter, xy =(plt.gca().get_xlim()[1]-2.4, pos), color=colorsHEX[int(pos)-1])
我尝试实现
energy\u rank
函数,删除
x\u数据上的+/-部分
,但最终只能得到带有点的斜线,而不是水平线。有谁能帮我解决一下,我如何画水平线,而不是垂直虚线,实现上面例子中的倾斜线

我认为这是垂直的,因为点在x记号的顶部变化。如果你观察第一张图片,水平条集中在每个x记号上,因此线条“有一些空间”倾斜

vazio
数据帧如下(包含每个设备的等级):


下面是对
能量等级
函数的一个调整,该函数创建水平线段及其连接。线条绘制部分的灵感来自。可以选择填充线条下方的区域

导入matplotlib.pyplot作为plt
从matplotlib.collections导入LineCollection
将numpy作为np导入
def能量等级(数据,标记宽度=.5,颜色='blue',ax=无,填充=假):
ax=ax或plt.gca()
y=数据
x=np.arange(1,len(数据)+1)
segments1=np.数组([x-标记宽度/2,y,x+标记宽度/2,y])。T.重塑(-1,2,2)
lc1=线条集合(分段1,颜色=颜色)
立法会一题:设定线宽(2)
立法会一题:设置"线型"("-")
行\u hor=ax.add\u集合(lc1)
segments2=np.数组([x[:-1]+标记宽度/2,y[:-1],x[1:]-标记宽度/2,y[1:])。T.重塑(-1,2,2)
lc2=线条集合(分段2,颜色=颜色)
立法会二题:设定线宽(0.5)
lc2.设置线条样式('--')
lines\u connect=ax.add\u集合(lc2)
如果填写:
(段1.整形(-1,2)[:,0],段1.整形(-1,2)[:,1],
颜色=颜色,α=0.05)
回油管,油管连接
图,ax=plt.子批次()
M、 N=5,25
y=np.随机.均匀(-2,2,(M,N)).累积和(轴=1)
y+=np.随机.均匀(0.5,2,(M,1))-y.min(轴=1,keepdims=True)
colorsHEX=(“#FE5815”、“#001A70”、“#2F5C22”、“#B01338”、“#00030D”)
对于彝族,拉链颜色(y,colorsHEX):
能量等级(yi,ax=ax,color=color)
ax.set_xlim(0,N+1)
ax.set_ylim(0,y.max()+1)
plt.show()

    Equipment         21-03-27  21-03-28    21-03-29    21-03-30    21-03-31    21-04-01    21-04-02 
P01-INV-1-1              1         1           1           1           1           2           2
P01-INV-1-2              2         2           4           4           5           1           1
P01-INV-1-3              4         4           3           5           6           10          10