matplotlib 使用textwrap.用列表缩短

ttygqcqt  于 2023-11-22  发布在  其他
关注(0)|答案(1)|浏览(87)

这段代码在excel文件中创建了一个表格和一个饼图,标签字段,从值列表中获取,太长了。

plt.pie(df.Confronto.value_counts(),
        labels=textwrap.shorten(df.Confronto.value_counts().index.tolist(), width=10, placeholder="..."))
    plt.title("Confronto {} - {}".format(Mese,Mese2,))
    plt.show()

字符串
所以我尝试使用text.shorten来缩短它,但它给了我这个错误:

labels=textwrap.shorten(df.Confronto.value_counts().index.tolist(), width=10, placeholder="...")) 
AttributeError: 'list' object has no attribute 'strip'


我试着转换,但它给了我一个关于标签长度不确定的错误

labels=textwrap.shorten(str(df.Confronto.value_counts().index.tolist()), width=10, placeholder="...")

raise ValueError("'label' must be of length 'x'")
ValueError: 'label' must be of length 'x'


下面的图片显示了代码在当前状态下的结果:标签太长,在创建图像时没有读取任何内容,我希望我可以对标签的长度设置最大值。


的数据

txu3uszq

txu3uszq1#

我不确定你想用这段代码实现什么,所以我只解释为什么会引发异常。这是因为pandas.Index.tolist返回一个列表,而textwrap.shorten用于字符串。所以,如果字符串是列表,就不能剥离字符串。
我假设df.Confronto.value_counts().index.tolist()返回int的列表,就像[1,2,3]一样。

label_string = ''.join(map(str,[1,2,3]))
Out: '123'

字符串
它首先将str()Map到int的列表上,以生成str的列表,然后用''符号将列表连接到单个字符串中。
但是,labels=采用str的列表,因此您可能需要使用

label_list = [ch for ch in label_string]


或者甚至对原始的df.Confronto.value_counts().index.tolist()进行切片以减少元素的数量,然后将str()Map到其上。
在评论中澄清之后,我建议对给定列表进行列表理解:

label_list = [textwrap.shorten(string, width=10, placeholder="...") for string in df.Confronto.value_counts().index.tolist()]

相关问题