gpt4 book ai didi

python - 当 sharex 时,使刻度标签在 pandas 图中可见

转载 作者:行者123 更新时间:2023-12-01 08:56:13 25 4
gpt4 key购买 nike

我想制作一个具有共享 x 轴的子图网格。绘图应(出于某些方便的原因)通过访问 Pandas DataFrame 的绘图方法来完成。另外,我希望 x-tick-labels 显示在网格的第一行中。我尝试使用以下代码来实现此目的:

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd


x = np.linspace(0,10,100)

nrows = 4
ncols = 3
fig, axes = plt.subplots(nrows, ncols, sharex=True)

for i, ax in enumerate(axes.reshape(-1)):
y = np.cos(x+i*np.pi)
df = pd.DataFrame(y, index=x)
# ax.plot(x, y) # shows top labels
df.plot(ax=ax, legend=None) # doesn't show top labels

if i < ncols:
# first row: plot x-ticks + x-labels
ax.tick_params(which='both', labeltop=True, top=True)
# also none of these approaches works:
# plt.setp(ax.get_xticklabels(), visible=True)
# ax.xaxis.set_tick_params(which='both', labeltop=True, top=True, colors='g')
# for label in ax.get_xticklabels():
# label.set_visible(True)

plt.show()

使用 Matplotlib 中的原始绘图例程是可行的,但是当我使用 Pandas 方法时,刻度标签保持隐藏状态。有什么想法,为什么以及如何解决这个问题?

提前非常感谢,
马库斯

最佳答案

您可以先像当前一样创建绘图,然后通过创建双轴为您想要的任何子图或子图的行/列设置刻度。

此示例仅根据需要为第一行另外设置 x-ticklabels。您在 plt.show() 之前添加这些行。 i<3这里仅表示第一行,因为这就是此处按顺序访问子图的方式。 both表示主要刻度和次要刻度。由于您尚未显示次要刻度,因此您目前只能获得主要刻度。您可以自定义if如果需要,可以将 x-ticklabels 添加到另一行的语句。我不得不删除 if i < ncols:从您的代码中发出命令以使其正常工作。

<小时/>

完整的工作代码

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import matplotlib
import sys

print (sys.version)
# 3.6.5 |Anaconda, Inc.|

print (matplotlib.__version__)
# 2.2.2

print (pd.__version__)
# 0.23.0

x = np.linspace(0,10,100)

nrows = 4
ncols = 3
fig, axes = plt.subplots(nrows, ncols, sharex=True,figsize=(12,6))

for i, ax in enumerate(axes.reshape(-1)):
y = np.cos(x+i*np.pi)
df = pd.DataFrame(y, index=x)
df.plot(ax=ax, legend=None) # doesn't show top labels

if i < 3:
ax1 = ax.twiny()
ax1.set_xlim(ax.get_xlim())
ax1.tick_params(axis='x', which='both', bottom=False, top=True, labelbottom=False)

plt.tight_layout()
plt.show()

enter image description here

关于python - 当 sharex 时,使刻度标签在 pandas 图中可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52756689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com