Панды: Как персонализировать dataframe.boxplot ()? - PullRequest
0 голосов
/ 14 декабря 2018

Я пытаюсь создать коробку с некоторыми данными, используя Pandas 'dataframe.boxplot().Вот пример кода:

import pandas as ps 
import matplotlib.pyplot as plt
df1 = ps.DataFrame( {'1':[2,3,4, 5,6,7, 9,10,11], 'blocks': [1,1,1, 2,2,2, 3,3,3]} )
#
boxes_col = dict(facecolor="snow", color="black", fill=True)
median_col = dict(color="black", linewidth=2)
whisk_col = dict(color="black")
cap_col = dict(color="black")
#
P = df1.boxplot(by='blocks', patch_artist=True,
           boxprops = boxes_col, medianprops = median_col,
            whiskerprops = whisk_col, capprops = cap_col,
             return_type = "dict",
               )
plt.title("")
plt.show()

Но результат не тот, который должен быть:

enter image description here

Результат вТекстовая форма:

{'whiskers': [<matplotlib.lines.Line2D object at 0x7f0fcd7c06d8>, <matplotlib.lines.Line2D object at 0x7f0fcd826ba8>, <matplotlib.lines.Line2D object at 0x7f0fcd7d82e8>, <matplotlib.lines.Line2D object at 0x7f0fcd7d8438>, <matplotlib.lines.Line2D object at 0x7f0fcd7e3eb8>, <matplotlib.lines.Line2D object at 0x7f0fcd7eb048>], 'caps': [<matplotlib.lines.Line2D object at 0x7f0fcd7c0c18>, <matplotlib.lines.Line2D object at 0x7f0fcd7ce080>, <matplotlib.lines.Line2D object at 0x7f0fcd7d8860>, <matplotlib.lines.Line2D object at 0x7f0fcd7d8c88>, <matplotlib.lines.Line2D object at 0x7f0fcd7eb470>, <matplotlib.lines.Line2D object at 0x7f0fcd7eb898>], 'boxes': [<matplotlib.patches.PathPatch object at 0x7f0fcd7c0470>, <matplotlib.patches.PathPatch object at 0x7f0fcd7d8080>, <matplotlib.patches.PathPatch object at 0x7f0fcd7e3c50>], 'medians': [<matplotlib.lines.Line2D object at 0x7f0fcd7ce4a8>, <matplotlib.lines.Line2D object at 0x7f0fcd7e30f0>, <matplotlib.lines.Line2D object at 0x7f0fcd7ebcc0>], 'fliers': [<matplotlib.lines.Line2D object at 0x7f0fcd7ce8d0>, <matplotlib.lines.Line2D object at 0x7f0fcd7e3518>, <matplotlib.lines.Line2D object at 0x7f0fcd7f4128>], 'means': []}

Я хочу спросить, как получить блокпост в стиле R (белый прямоугольник, черные линии)?

1 Ответ

0 голосов
/ 14 декабря 2018

Попробуйте установить переменную для осей, и вы можете изменить многие свойства, касающиеся графика.

fig, ax = plt.subplots(nrows=1, ncols=1)
P = df1.boxplot(by='blocks', patch_artist=True, ax=ax,
           boxprops = boxes_col, medianprops = median_col,
            whiskerprops = whisk_col, capprops = cap_col,
             return_type = "dict",
               )
ax.grid(False)
for patch in P[0]['boxes']:
    patch.set_facecolor('white')

output

...