更改pandas中boxplot的facecolor

时间:2016-09-02 16:32:52

标签: python pandas matplotlib boxplot

我需要更改使用pandas效用函数绘制的箱线图的颜色。我可以使用color参数更改大多数属性,但无法弄清楚如何更改框的facecolor。有人知道怎么做吗?

import pandas as pd
import numpy as np
data = np.random.randn(100, 4)
labels = list("ABCD")
df = pd.DataFrame(data, columns=labels)
props = dict(boxes="DarkGreen", whiskers="DarkOrange", medians="DarkBlue", caps="Gray")
df.plot.box(color=props)

2 个答案:

答案 0 :(得分:5)

虽然我仍然在pandas的绘图界面上推荐seaborn和raw matplotlib,但事实证明你可以将patch_artist=True作为kwarg传递给df.plot.box,它会将它作为kwarg传递给{df.plot 1}},将作为kwarg传递给matplotlib.Axes.boxplot

import pandas as pd
import numpy as np
data = np.random.randn(100, 4)
labels = list("ABCD")
df = pd.DataFrame(data, columns=labels)
props = dict(boxes="DarkGreen", whiskers="DarkOrange", medians="DarkBlue", caps="Gray")
df.plot.box(color=props, patch_artist=True)

enter image description here

答案 1 :(得分:0)

正如所建议的,我最终使用原始matplotlib创建了一个绘制此函数的函数。

def plot_boxplot(data, ax):
    bp = ax.boxplot(data.values, patch_artist=True)

    for box in bp['boxes']:
        box.set(color='DarkGreen')
        box.set(facecolor='DarkGreen')

    for whisker in bp['whiskers']:
        whisker.set(color="DarkOrange")

    for cap in bp['caps']:
        cap.set(color="Gray")

    for median in bp['medians']:
        median.set(color="white")

    ax.axhline(0, color="DarkBlue", linestyle=":")

    ax.set_xticklabels(data.columns)