
为什么我的杆子这么薄?我试着将宽度设置为1,它们变得非常厚。我不确定还能尝试什么。默认厚度是0.8,它看起来应该是这样的吗?
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import pandas as pd
import numpy as np
working_runs = pd.DataFrame(np.random.uniform(1, 2, 210),
columns=['distance'],
index=pd.date_range('2019-06-01', periods=210, freq='D'))
summed = working_runs['distance'].resample('W').sum()
df = pd.DataFrame(summed)
fig, ax = plt.subplots()
ax.bar(df.index, df.distance)
ax.set_xticks(df.index)
ax.xaxis.set_major_formatter(mdates.DateFormatter("%B %d"))
ax.xaxis.set_minor_formatter(mdates.DateFormatter("%B %d"))
plt.xticks(rotation=90)
fig = ax.get_figure()
fig.set_figheight(10)
fig.set_figwidth(12)
plt.title('2019 Weekly Running Miles')
plt.ylabel('Distance /m')
fig.savefig("output.png")我试着这样修改它:
ax.bar(df.index, df.distance,width=1)
0.9看起来没有什么不同,而1.0看起来像这样:

发布于 2020-01-04 06:01:14
我可以确认这种奇怪的行为,当将宽度设置为小于1.0的值时,它似乎被解释为一天的宽度。当它设置为1.0或更高时,它被解释为一周的宽度。
熊猫和matplotlib如何协同工作似乎是个问题。
一种解决方法是使用ax.bar(df.index, df.distance, width=1, edgecolor='white')中的edgecolor,如下所示:
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import pandas as pd
import numpy as np
from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()
working_runs = pd.DataFrame(np.random.uniform(1, 2, 210),
columns=['distance'],
index=pd.date_range('2019-06-01', periods=210, freq='D'))
summed = working_runs['distance'].resample('W').sum()
df = pd.DataFrame(summed)
fig, ax = plt.subplots()
ax.bar(df.index, df.distance, width=1, edgecolor='white')
ax.xaxis.set_major_formatter(mdates.DateFormatter("%B %d"))
ax.xaxis.set_major_locator(mdates.DayLocator(interval=7))
ax.autoscale(enable=True, axis='x', tight=True)
plt.xticks(rotation=90)
plt.title('2019 Weekly Running Miles')
plt.ylabel('Distance /m')
plt.show()

我用df.plot.bar(y='distance', width=0.9, ax=ax)做了一个逗留熊猫的实验。格式化日期可以通过显式地将index转换为标签列表来完成。同样在这种情况下,使用width=1和edgecolor='white'绘图会更好。
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
import pandas as pd
import numpy as np
working_runs = pd.DataFrame(np.random.uniform(1, 2, 210),
columns=['distance'],
index=pd.date_range('2019-06-01', periods=210, freq='D'))
summed = working_runs['distance'].resample('W').sum()
df = pd.DataFrame(summed)
fig, ax = plt.subplots()
df.plot.bar(y='distance', width=0.9, ax=ax)
plt.xticks(range(len(df.index)),
[t.to_pydatetime().strftime("%b %d") for t in df.index],
rotation=90)
plt.title('2019 Weekly Running Miles')
plt.ylabel('Distance /m')
plt.show()

发布于 2020-01-03 19:49:38
请参阅文档中的:
matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)这里也有文档链接:https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.bar.html
和相关的SO answer
https://stackoverflow.com/questions/59577778
复制相似问题