我的顶部 xticks 标签卡在 matplotlit 图的右上角。如何将它们设置在时间序列的正确位置?底部的 xtick 标签很好。我只想将顶级的与他们匹配。我怎样才能做到这一点?请参阅下面的代码和图像。
import matplotlib.pyplot as plt
time_zones = pd.to_datetime(["2022-07-31 2:00", "2022-07-31 6:00", "2022-07-31 9:00",
"2022-07-31 14:00", "2022-07-31 17:00", "2022-07-31 23:55"])
fig, ax = plt.subplots(figsize=(14,8))
ax.spines["top"].set_visible(False)
ax.spines["bottom"].set_visible(False)
ax.spines["right"].set_visible(False)
ax.spines["left"].set_linestyle(":")
ax.spines["left"].set_linewidth(.36)
ax.plot(df.loc["2022-07-31", "High"], color="green")
ax.plot(df.loc["2022-07-31", "Low"], color="red")
ax.set_ylabel("Price (€)", color="b")
ax.tick_params(labeltop=False, labelbottom=True)
ax.set_xticks(time_zones, ["02:00", "06:00", "09:00", "14:00","17:00", "00:00"])
axT = ax.twiny()
axT.tick_params(labeltop=True, labelbottom=False)
axT.set_xticks(time_zones, ["Hong Kong", "Dubai", "London", "New York","Los Angeles", "Sydney"], fontsize=12, color="b")
ax.grid(True, linestyle=":")
plt.box(False)
plt.show()
- 我尝试旋转并设置不同的刻度参数,但没有成功。有人能帮我一下吗?
问题在于,在第二个轴 (
axT
) 上设置 x 刻度的位置,但没有为该轴指定任何数据,因此刻度最终位于默认空间中。
不需要使用
twiny
来做到这一点。 只需使用
ax.set_xticklabels
为顶部 x 轴指定不同的标签。
以下是修改后的代码:
import matplotlib.pyplot as plt
import pandas as pd
# 示例数据
df = pd.DataFrame({
'High': [10, 12, 15, 14, 16, 18],
'Low': [8, 9, 12, 11, 13, 15]
}, index=pd.to_datetime(["2022-07-31 02:00", "2022-07-31 06:00", "2022-07-31 09:00",
"2022-07-31 14:00", "2022-07-31 17:00", "2022-07-31 23:55"]))
time_zones = pd.to_datetime(["2022-07-31 2:00", "2022-07-31 6:00", "2022-07-31 9:00",
"2022-07-31 14:00", "2022-07-31 17:00", "2022-07-31 23:55"])
fig, ax = plt.subplots(figsize=(14,8))
ax.spines["top"].set_visible(False)
ax.spines["bottom"].set_visible(False)
ax.spines["right"].set_visible(False)
ax.spines["left"].set_linestyle(":")
ax.spines["left"].set_linewidth(.36)
ax.plot(df.loc["2022-07-31", "High"], color="green")
ax.plot(df.loc["2022-07-31", "Low"], color="red")
ax.set_ylabel("Price (€)", color="b")
ax.tick_params(labelbottom=True)
ax.set_xticks(time_zones, ["02:00", "06:00", "09:00", "14:00","17:00", "00:00"])
# 设置顶部 x 轴的标签
ax.set_xticklabels(["Hong Kong", "Dubai", "London", "New York","Los Angeles", "Sydney"],
minor=False, fontsize=12, color="b")
ax.tick_params(axis='x', which='major', labeltop=True, labelbottom=False)
ax.grid(True, linestyle=":")
plt.box(False)
plt.show()
此代码将:
-
删除
twiny
轴的创建 : 不需要第二个轴来实现想要的效果。 -
使用
ax.set_xticklabels
设置顶部标签 : 此函数允许为现有的 x 刻度设置不同的标签。 -
使用
labeltop=True
和labelbottom=False
: 这将确保仅显示顶部的标签。
这将生成一个图形,其中时间在底部,城市在顶部对齐,所有内容都位于正确的位置。
标签:python,matplotlib,ticks From: 78840852