gpt4 book ai didi

python - Seaborn:有没有更好的方法将文本包裹在我的条形图中?

转载 作者:行者123 更新时间:2023-12-04 01:36:32 25 4
gpt4 key购买 nike

我正在为条形图编写函数,但遇到了另一个小问题。我有一些 ytick 标签太长,导致无法看到我的 y 轴标签。当我大幅减小 ytick 标签的大小时,我只能看到 y 标签。

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]>1000000).any():
data[x] = data[x] / 1000000
ax = sns.barplot(data=data, x=x, y=y)
ax.set_title(title, size=35)
ax.set_xlabel(x + ' ($ Millions)', size=15)
ax.set_ylabel(y, size=15)
ax.set_yticklabels(data[y].head(n=10), wrap=True)

else:
ax = sns.barplot(data=data, x=x, y=y)
ax.set_xlabel(x, size=15)
ax.set_ylabel(y, size=15)
ax.set_title(title, size=35)
ax.set_yticklabels(data[y].head(n=10), wrap=True)

我试过 ax.set_yticklabels(data[y].head(n=10), wrap=True) 来包装文本。虽然它有效,但它对文本的包装不够。有没有办法告诉 wrap=True 在 x 个字符后换行?我试过用谷歌搜索,但找不到任何有用的东西。

编辑

我正在使用的数据框的格式类似于

Client Name            Col 1      Col 2      Col 3      Col 4       Col 5
Some name 51,235.00 nan 23,423.00 12,456.00 654.00
Some long company name 152.00 5,626.00 nan 82,389.00 5,234.00
Name 12,554.00 5,850.00 1,510.00 nan 12,455.00
Company 12,464.00 nan 752.00 1,243.00 1,256.00
Long Company Name 12,434.00 78,915.00 522.00 2,451.00 6,567.00

最佳答案

@ImportanceOfBeingErnest指出,您可以使用 textwrap 执行此操作的模块,特别有用的是 textwrap.fill() :

textwrap.fill(text[, width[, ...]])

Wraps the single paragraph in text so every line is at most width characters long, and returns a single string containing the wrapped paragraph. fill() is shorthand for

"\n".join(wrap(text, ...))



尽管您需要在每个标签上分别调用它,例如
ax.set_yticklabels([textwrap.fill(e, width) for e in data[y].head()])

编辑
这是一个更完整的示例来显示用法:
import textwrap
import matplotlib.pyplot as plt
import pandas as pd

df = {'Client Name': ['Some Name', 'Some long company name', 'Name',
'Company', 'Long Comany Name'],
'Col 1': [51235, 152, 12554, 12464, 12434]}
data = pd.DataFrame(df)

fig, ax = plt.subplots(1)


ax.set_yticklabels(data['Client Name'].head())
plt.show()
这将显示以下内容
enter image description here
然而
ax.set_yticklabels([textwrap.fill(e, 7) for e in data['Client Name'].head()])
plt.show()
会显示更多类似的东西
enter image description here

关于python - Seaborn:有没有更好的方法将文本包裹在我的条形图中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59305648/

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