【问题标题】:Bigger x-axis range in seaborn plotseaborn图中更大的x轴范围
【发布时间】:2017-03-17 15:15:57
【问题描述】:

我正在使用 matplotlib/seaborn 绘制条形图,范围是最小值/最大值,并且它会跳过计数为 0 的值。如何既填充范围又不跳过 0 值?

# bar
ax2 = figDayMonth.add_subplot(2,1,2)
ax2 = sns.countplot(x=np.asarray(dayMonth), palette="pastel")
ax2.set_title('Days of Month Counts', FontSize=20)
ax2.tick_params(labelsize=15)
ax2.set_ylabel("Count", FontSize=16)
ax2.set_xlabel("Day of Month", FontSize=16)
sns.despine(left=True, bottom=True, top=True, right=True)
plt.show()
print(2*'\n')

dayMonth 是具有上述计数的整数列表。尽管例如没有 2、29 或 30 个值,但我仍然希望图表为这些值保留一个位置。

我尝试了ax2.set_xticks(np.arange(32)),但这似乎只是将我的图表向左挤压而不改变 x 轴值。

【问题讨论】:

  • 您可以添加足够的代码来运行它并查看问题吗?
  • dayMonth 列表来自于从外部高清路径中提取文件时间戳,所以我认为它没有用处
  • 什么是dayMonth?它有没有计数为 0 的日子?你可能想阅读和理解minimal reproducible example
  • dayMonth 只是一个整数列表,上面显示了计数。它不能包含 0 计数,否则它们将不再为 0。希望有 mpl/seaborn 经验的人会立即认识到我的错误。我将尝试编写一些代码来生成假数据,以便可以很快运行。
  • “希望有 mpl/seaborn 经验的人能立即认出我的错误。”即使有人立即看到你做错了什么,没有可重复的例子,他们也必须不厌其烦地生成数据来演示如何解决问题。通过创建一个可重复的示例,您可以节省他们的精力并增加您获得帮助的机会。

标签: python matplotlib graph seaborn


【解决方案1】:

本质上,您想要绘制输入列表的直方图。可以使用

创建该直方图
x = np.arange(1,33)
plt.hist(dayMonth, bins=x)

一个完整的例子是

import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt

dayMonth = [1,3,12,30,2,3,12,16,18,31,3,13,16,18,30,1,3,12,16,18,30]
x = np.arange(1,33)    
_,_,bars = plt.hist(dayMonth, bins=x, align="left")

colors=sns.color_palette(palette="pastel", n_colors=len(x))
for color, bar in zip(colors, bars):
    bar.set_color(color)
plt.gca().set_xlim(-1,32)
plt.xticks(x[:-1])
plt.show()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 2016-09-03
    • 2021-01-07
    • 2020-10-21
    相关资源
    最近更新 更多