作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用以下内容编写条形图函数:
def bar_plot(data, x, y, title):
sns.set_style('darkgrid')
data = data.sort_values(ascending=False, by=x)
data = data.head(n=10)
if data[x].any() > 1000000:
data[x] = data[x] / 1000000
ax = sns.catplot(data=data, x=x, y=y, kind='bar')
ax.set_xlabels(x + ' ($ Millions)', size=15)
plt.subplots_adjust(top=0.9)
ax.set_ylabels(y, size=15)
ax.fig.suptitle(title, size=35)
else:
ax = sns.catplot(data=data, x=x, y=y, kind='bar')
ax.set_xlabels(x, size=15)
plt.subplots_adjust(top=0.9)
ax.set_ylabels(y, size=15)
ax.fig.suptitle(title, size=35)
我希望它能够与我正在使用的几个不同的数据帧一起使用。我有一些数据框包含很多大值,一些数据框包含小值。我想将那些具有较大值的数据帧除以一百万,以使图表更易于阅读。我最初的理解是 data[x].any() > 1000000
会找到数据帧中超过一百万的任何行并返回 True
然后运行 if
语句。然而,即使数据帧的值明显超过一百万,它也会跳到 else
语句。
在尝试找出问题时,我通过查找百万以下的值来反转 if
语句:
def bar_plot(data, x, y, title):
sns.set_style('darkgrid')
data = data.sort_values(ascending=False, by=x)
data = data.head(n=10)
if data[x].any() < 1000000:
ax = sns.catplot(data=data, x=x, y=y, kind='bar')
ax.set_xlabels(x, size=15)
plt.subplots_adjust(top=0.9)
ax.set_ylabels(y, size=15)
ax.fig.suptitle(title, size=35)
else:
data[x] = data[x] / 1000000
ax = sns.catplot(data=data, x=x, y=y, kind='bar')
ax.set_xlabels(x + ' ($ Millions)', size=15)
plt.subplots_adjust(top=0.9)
ax.set_ylabels(y, size=15)
ax.fig.suptitle(title, size=35)
此再现现在只返回 if
语句,永远不会转到 else
语句,即使值远远超过一百万。我有点困惑为什么即使条件翻转,也只有函数的相同部分起作用。
最佳答案
问题出在你的条件的排序上。
这有效:
(data[x]>1000000).any()
当您执行data[x].any() > 1000000
时,您正在询问Python:
我的列中是否有任何 True
值?这只能得到 True (1) 或 False(0)。
那么你问的是:
1(或0)是否大于1000000?这将始终为 False,因此您始终会转到 else
语句。
希望这能解决问题!
关于Python seaborn 绘图 : having a small issue while writing a function for bar plots,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59287256/
我是一名优秀的程序员,十分优秀!