使用Matplotlib的Twinx进行绘图时缺少条形图

时间:2019-11-18 16:09:57

标签: python-3.x pandas matplotlib data-visualization

我正在使用matplotlib.axes.Axes.twinx在matplotlib中为这两个共享一个x轴。我不知道为什么只绘制12条,而不是绘制13条。

Link of Data set Current Output

import matplotlib.pyplot  as plt
import pandas as pd
import numpy as np
dataFrame=pd.read_csv("NEM.csv",sep=',')
dataFrame['ratio']=dataFrame['Expert']/dataFrame['Novice']


fig, ax1 = plt.subplots(figsize=(9, 6))
ax1.set_title('N-E Analysis')
xticklabels=dataFrame['Task'].tolist()

ax1.plot('Novice', data=dataFrame, marker='', color='dodgerblue', linewidth=2,label='Novice',zorder=100)
ax1.plot('Expert', data=dataFrame, marker='', color='darkorange', linewidth=2,label='Expert',zorder=200)

plt.ylim(0,120)

ax2 = ax1.twinx()

ax2.bar('Task','ratio', data=dataFrame, color='gray',width=0.35,label='NE',zorder=0)


ax1.spines['top'].set_visible(False)
ax1.spines['right'].set_visible(False)
ax1.spines['left'].set_visible(False)

ax2.spines['top'].set_visible(False)
ax2.spines['right'].set_visible(False)
ax2.spines['left'].set_visible(False)


ax1.set_xticklabels(xticklabels, rotation = 45, ha="right")
ax1.yaxis.grid()
ax1.tick_params(left='off',bottom='off')
ax2.tick_params(right='off')
plt.ylim(0,12)

h1, l1 = ax1.get_legend_handles_labels()
h2, l2 = ax2.get_legend_handles_labels()
p=ax1.legend(h2+h1, l2+l1, loc=2,frameon=False)


fig.tight_layout()
plt.show()

1 个答案:

答案 0 :(得分:0)

使用plots时,最好明确指出要绘制多少条或点。例如,您可以通过以下方式创建x-axis

x_axis = np.arange(len(dataFrame[Task].tolist())

然后:

ax1.plot(x_axis, dataFrame['Novice'].tolist(), ...)

之后,您像这样重命名xticklabels

ax1.set_xticks(x_axis)
ax1.set_xticklabels(dataFrame[Task].tolist())

bar图执行相同操作:

ax2.bar(x_axis, dataFrame['Ratio'].tolist(), ...)

这应该可以解决问题。 希望对您有所帮助。