【发布时间】:2020-10-06 16:15:26
【问题描述】:
我在格式化 seaborn 图表时遇到了问题,我在其中重叠了两个图表(线和条)。假设我到目前为止有以下代码:
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()
df1["a"].plot(kind='bar', color='blue', ax=ax1)
df2["b"].plot(kind='line', marker='d', ax=ax2)
ax.set_xticklabels(('2015', '2016', '2017', '2018', '2019', '2020'))
ax1.yaxis.tick_right()
ax1.set_ylabel('Label A')
ax2.yaxis.tick_left()
ax2.set_ylabel('Label B')
ax1.set_xticklabels(('2015', '2016', '2017', '2018', '2019', '2020'))
plt.show()
产生这样的东西:
如果我能获得以下方面的建议,我将不胜感激:
- 避免标签和刻度重叠
- 将标签 B 轴设为 0 ~ 100 的百分比(是的,我的大部分数据都徘徊在 30% 左右,但我想指出它有多低。)基本上,我想尝试 axes.ylim(( "0","100")) 但它对我不起作用。
- 显示每个条的整个宽度(第一个和最后一个条被轴切割,但我真的不知道如何避免它)
非常抱歉,如果我在这里犯了一些基本错误,但这将非常有帮助,因为在我的在线课程中似乎没有人积极参与查询。
*编辑: 请注意,我的屏幕截图在其中一个 y 轴上有非常大的数字,因为我刚刚为我的实际工作笔记本拍照。但是,请随意使用以下示例数据集进行演示:
df1 = [39, 30, 40, 36, 28, 42]
df2 = [5, 8, 7, 3, 2, 6]
【问题讨论】:
-
我也关心左上角的1e11,表示y轴上的“8”不是
8,而是800,000,000,000。那是你要的吗?如果您能提供一个 minimal 但显示相同问题并且我们可以运行的 mcve 将是最好的(只需为其制作一些假数据,例如data1 = [4, 3, 7, 7, 2, 6]或其他)。跨度> -
感谢您的指出。我正在处理的实际代码(我截取图表的地方)有大量的总预算。 (我不妨稍后将它们清理成 xx 百万/千形式...)但是是的,我可能会放一个随机样本数据框以防万一!
标签: python matplotlib graph seaborn