2017-08-01 103 views
0

尝试创建基于2的条形图列出我正在从CSV文件中拖动。XY条形图datanot对应的matplotlib

这些被定义为X和Y

[42127L, 42129L, 44161L, 44166L, 44167L, 44168L, 44169L, 44170L] 
[21.633899998, 19.125503355699998, 19.9757477769, 20.5028595637, 20.4502863092, 18.4269712278, 20.4741833509, 19.2441994027] 

但是这两个列表中,X值不会出现排着队。

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 

df = pd.read_csv("N:\\Wild_Pig_Project\\\Mean_temp.csv", names = ['Device_ID', 'Mean']) 

y = df.Mean.tolist() 
x = df.Device_ID.tolist() 

fig, ax = plt.subplots() 
width = 50 
ax.set_xticklabels(x) 
ax.set_yticklabels(y) 
ax.bar(x, y, width, color='Red') 
plt.show() 

Graph

回答

3

我试图修改代码:

import numpy as np 
import matplotlib.pyplot as plt 

x = ['42127L', '42129L', '44161L', '44166L', '44167L', '44168L', '44169L', '44170L'] 
y = [21.633899998, 19.125503355699998, 19.9757477769, 20.5028595637, 20.4502863092, 18.4269712278, 20.4741833509, 19.2441994027] 

fig, ax = plt.subplots() 

ax.bar([idx for idx in range(len(x))], y, color='Red') 
ax.set_xticks([idx+0.5 for idx in range(len(x))]) 
ax.set_xticklabels(x, rotation=35, ha='right', size=10) 
fig.tight_layout() 
plt.show() 

的关键点是:

  1. 必须设置的职位xticks(yticks)你的xtick(ytick)标签。
  2. 'bar()'的第一个参数是每个小节的位置。

顺便说一句,我不太清楚你为什么要使用你的yticks的自定义标签我想你想显示处理时间btw不同设备的比较。 这应该会给你一个合理的结果。

+0

两种意义!谢谢 –

2

您可以尝试将xticks自己设置为x以及xticklabels。但是,您的x数据不是均匀分布的,并且会生成一个条形图,并将它们捆绑在一起(类似于屏幕截图中显示的内容)。

解决方案可以创建一个均匀间隔的数组,然后使用此图绘制条形图,然后将刻度标签设置为x

下面的例子:

import numpy as np 
import matplotlib.pyplot as plt 

x = [42127, 42129, 44161, 44166, 44167, 44168, 44169, 44170] 
y = [21.633899998, 19.125503355699998, 19.9757477769, 20.5028595637, 20.4502863092, 18.4269712278, 20.4741833509, 19.2441994027] 
ticks = np.arange(1,9,1) # can replace 9 with len(y) to be a more general solution 

fig, ax = plt.subplots() 
width = 0.5 

ax.set_xticks(ticks) 
ax.set_xticklabels(x) 
ax.set_yticklabels(y) 

ax.bar(ticks, y, width, color='Red') 

plt.show() 

将会产生如下图所示:

这些答案enter image description here