我正在尝试将辅助
y 标签
旋转到
270 degrees
,但是当我通过
rotate=270
参数执行此操作时,它会与我的
y 刻度
文本重叠。任何想法如何解决这一问题?
fig, ax = plt.subplots()
ax.plot(df.index,df.tripTime,label='Fishing Effort', marker='D')
ax2=ax.twinx()
ax2.plot(tr.index,tr.cost, 'g',label='Fuel Expenditure', marker='d')
lines = ax.get_lines() + ax2.get_lines()
ax.legend(lines,[line.get_label() for line in lines], loc='lower left')
ax.set_ylim((0, 18))
ax2.set_ylabel('Cost ($)',color='g', rotation=270)
for tl in ax2.get_yticklabels():
tl.set_color('g')
ax.set_ylabel('Fishing Effort (hrs)')
ax.set_xlabel('Time (days)')
plt.show()
要旋转辅助 y 轴标签而不与 y 刻度重叠,需要在旋转标签后调整 y 轴标签的填充。这可以使用
matplotlib.ticker.Formatter
对象中的
labelpad
参数来完成。
请在的代码中尝试以下修改:
import matplotlib.ticker as ticker
# ...的现有代码...
ax2.set_ylabel('Cost ($)', color='g', rotation=270)
ax2.yaxis.set_label_position("right") # 确保标签位于右侧
ax2.yaxis.tick_right() # 将刻度移到右侧
# 在这里添加填充
y_formatter = ticker.ScalarFormatter(useOffset=False)
y_formatter.set_label_padding(10) # 调整填充值
ax2.yaxis.set_major_formatter(y_formatter)
# ...的现有代码...
这会在 y 轴标签和刻度之间添加 10 个单位的填充。可以调整
labelpad
值以满足的需要。
以下是代码完整修改后的版本:
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import pandas as pd
# 示例数据
df = pd.DataFrame({'tripTime': [2, 4, 6, 8, 10, 12, 14, 16]})
df.index = range(1, len(df) + 1)
tr = pd.DataFrame({'cost': [10, 20, 30, 40, 50, 60, 70, 80]})
tr.index = range(1, len(tr) + 1)
fig, ax = plt.subplots()
ax.plot(df.index, df.tripTime, label='Fishing Effort', marker='D')
ax2 = ax.twinx()
ax2.plot(tr.index, tr.cost, 'g', label='Fuel Expenditure', marker='d')
lines = ax.get_lines() + ax2.get_lines()
ax.legend(lines, [line.get_label() for line in lines], loc='lower left')
ax.set_ylim((0, 18))
ax2.set_ylabel('Cost ($)', color='g', rotation=270)
ax2.yaxis.set_label_position("right")
ax2.yaxis.tick_right()
# 添加填充
y_formatter = ticker.ScalarFormatter(useOffset=False)
y_formatter.set_label_padding(10)
ax2.yaxis.set_major_formatter(y_formatter)
for tl in ax2.get_yticklabels():
tl.set_color('g')
ax.set_ylabel('Fishing Effort (hrs)')
ax.set_xlabel('Time (days)')
plt.show()
这应该可以解决重叠问题,并使的绘图更易于阅读。
标签:python,matplotlib From: 35020409