python-3.x - 使用 Matplotlib 的 Twinx 绘图时缺少条形图
问题描述
我正在使用 matplotlib.axes.Axes.twinx 在 matplotlib 中为两者共享一个 x 轴。我不知道为什么不是要绘制 13 个条形图,而是只绘制 12 个条形图。
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()
解决方案
使用 时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(), ...)
这应该可以解决问题。希望能帮助到你。
推荐阅读
- swift - 将 CorePlot 添加到迦太基后构建失败错误
- mysql - 错误代码:1210. MySQL Workbench 中视图上的 MATCH 参数不正确
- hashicorp-vault - 检查密封状态时出错:获取 https://127.0.0.1:8200/v1/sys/seal-status: x509:
- amazon-web-services - 来自后端资源的 Websocket 事件?
- powerbi - PowerBI:计算表包含一个值而不是另一个值
- nginx - 如何使用 Nginx 提供 Redis 密钥?
- android - Flutter 使用 android 库的视图
- linux - Powershell Core 7.1.3 与 Bash/ZSH 相同的命令不同的输出。.. 为什么?
- python - .xslx 文件不会使用 openpyxl 返回单元格值
- spring - 无法获得令牌有效性