首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >width>=1.0每周条width<1.0太细,Matplotlib太粗

width>=1.0每周条width<1.0太细,Matplotlib太粗
EN

Stack Overflow用户
提问于 2020-01-03 19:25:43
回答 2查看 2.1K关注 0票数 2

为什么我的杆子这么薄?我试着将宽度设置为1,它们变得非常厚。我不确定还能尝试什么。默认厚度是0.8,它看起来应该是这样的吗?

代码语言:javascript
复制
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看起来像这样:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-04 06:01:14

我可以确认这种奇怪的行为,当将宽度设置为小于1.0的值时,它似乎被解释为一天的宽度。当它设置为1.0或更高时,它被解释为一周的宽度。

熊猫和matplotlib如何协同工作似乎是个问题。

一种解决方法是使用ax.bar(df.index, df.distance, width=1, edgecolor='white')中的edgecolor,如下所示:

代码语言:javascript
复制
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=1edgecolor='white'绘图会更好。

代码语言:javascript
复制
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()

票数 1
EN

Stack Overflow用户

发布于 2020-01-03 19:49:38

请参阅文档中的:

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59577778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档