Как изменить линейку усов на пандах?

Есть ли способ изменить линейный стиль усов на пандамах панда на '-'? По умолчанию, кажется, "-".

Я пытался:

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 вообще не принимает входные данные.

Это тесно связано с коробчатым графиком Панд: установите цвет и свойства для поля, медианы, среднего

3 ответа

Решение

Комментарии Теда Петру помогли:

Поместите 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 непосредственно в аргумент. Однако я все еще не мог изменить цвет коробок! Он остается синим по умолчанию. Следующий код приводит к появлению сплошных черных усов, однако прямоугольники синего цвета. Ширина ящиков может быть изменена!

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

Если кто-то может помочь с изменением цвета ящиков в df.boxplot(), пожалуйста, оставьте комментарий. Из документации панд я узнаю, что люди должны использовать df.plot.box в любом случае, хотя.

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))

У меня нет панд здесь, но он использует 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()

Доступные стили линий показаны в этом примере line_styles_reference.

Другие вопросы по тегам