如何在pandas箱线图中更改whiskers的线型?

9

有没有办法将pandas箱线图中的whiskers linestyle更改为“-”? 默认似乎是“--”。

我尝试过:

color = dict(boxes='black', whiskers='black', medians='red', caps='black')
styles=dict(whiskers='-')
bp = df.plot.box(color=color, style=styles)

然而,虽然颜色符合我的要求,但样式输入似乎并没有影响图表的呈现。

这里有一个例子。我总是得到虚线的须,但想要实线。

我还尝试过

boxprops = dict(linewidth=1.0, color='black')
whiskerprops = dict(linestyle='-',linewidth=1.0, color='black')
plt.figure()
df.boxplot(boxprops=boxprops, whiskerprops=whiskerprops)

在这里,df.boxplot根本不接受输入。

这与Pandas boxplot: set color and properties for box, median, mean密切相关。


默认值为“-”。你的代码对我有效。你想要什么样的风格? - Ted Petrou
看起来我的问题是一个 bug - 目前还没有修复 - https://github.com/pandas-dev/pandas/issues/15079 - Ted Petrou
奇怪。 就像我没有指定任何属性一样,第二个给了我一个数字 :/ 我想你在 df.boxplot 之前添加了 plt.figure(),是吗?(请参阅我的编辑) - knut_h
1
重新启动你的笔记本电脑或者你正在编程的设备。 - Ted Petrou
1
只在笔记本的顶部运行此代码,并让我知道你得到了什么结果。import seaborn as sns tips = sns.load_dataset('tips') tips.boxplot('tip', whiskerprops = dict(linestyle='-',linewidth=4.0, color='black')) - Ted Petrou
显示剩余6条评论
3个回答

10

Ted Petrou的评论有所帮助:

将"whiskerprops = dict()"直接放在"df.plot.box"中:

color = dict(boxes='black', whiskers='black', medians='red', caps='black')
bp = df.plot.box(color=color,whiskerprops = dict(linestyle='-',linewidth=1.0
, color='black'))

关于df.boxplot(),似乎存在by参数的问题。在此将whiskerprops和boxprops直接包含到参数中也有所帮助。但我仍然无法更改箱线图的颜色!它仍然是默认的蓝色。下面的代码产生了实线、黑色的whiskers,但是boxes仍然是蓝色。不过,箱体的线宽是可以改变的!

plt.figure()
df.boxplot(boxprops= dict(linewidth=1.0, color='black')
, whiskerprops=dict(linestyle='-',linewidth=1.0, color='black'))

如果有人可以帮忙更改 df.boxplot() 中的箱子颜色,请评论。根据 pandas 文档,建议使用 df.plot.box。


3
import numpy as np
import pandas as pd

mu, sigma = 0, 1 
s = np.random.normal(mu, sigma, 1000)

df = pd.DataFrame(s)

bPlot = df.boxplot(whiskerprops = dict(linestyle='--'
                           , linewidth=2))

enter image description here


1

我这里没有pandas,但它使用matplotlib。pyplot.boxplot返回:

一个字典,将箱线图的每个组件映射到所创建的matplotlib.lines.Line2D实例列表。

一组线条用于代表须。您可以通过访问字典来设置每个须的linestyle属性

from pprint import pprint
import matplotlib.pyplot as plt

data = [[1, 2, 3, 4, 5], [2, 3, 4], [1, 1.2, 1.4, 1.8]]
a = plt.boxplot(data)
pprint(a)
for whisker in a['whiskers']:
    whisker.set_linestyle('-.')
    print(whisker.get_linestyle())
plt.show()
plt.close()

在这个线型参考示例中展示了可用的线型。


有趣的是,更改 'plt.boxplot()' 的样式没有出现任何问题。但是使用pandas的 'df.boxplot()' 没有接受 by 参数。也许我会尝试您的方法并告诉您结果如何! - knut_h

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接