Pandas метод .plot () не принимает указанные цвета на гистограмме - PullRequest
1 голос
/ 03 августа 2020

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

Для этого я получаю длинную строку текста, я считаю значения для каждой буквы и затем превратите его в pandas .DataFrame ().

DataFrame имеет эту структуру

    kp
e   12.534045
a   12.167107
o   9.238939
s   7.103866
n   6.470274

Я рисую с помощью

# Lazy definition of left_side and right_side of the keyboard
left_side  = [l for l in 'qwertasdfgzxcvb']
right_side = [l for l in 'yuiophjklñnm,.-'] 

# Plot the graph
df.plot(
    kind = 'bar',
    figsize = (10,5),
    color = ['r' if letter in left_side else 'b' for letter in df.index]
)

Но это делает участок со всеми красными полосами. Я проверил, и сгенерированный список с пониманием списка действительно такой, каким он должен быть (список «r» и «b» в соответствии с их расположением на клавиатуре).

Есть идеи, что здесь происходит?

Ответы [ 2 ]

2 голосов
/ 03 августа 2020

Не выяснил, где не так с цветом, определенным в df.plot(). Но нахожу рабочий с plt.bar().

import pandas as pd
import matplotlib.pyplot as plt


data = {'kp': [12.534045, 12.167107, 9.238939, 7.103866, 6.470274]}
df = pd.DataFrame(data, columns=['kp'], index=['e','a','o','s','n'])

left_side  = [l for l in 'qwertasdfgzxcvb']
right_side = [l for l in 'yuiophjklñnm,.-'] 

color_list = ['r' if letter in left_side else 'b' for letter in df.index]

plt.bar(df.index, df['kp'], color=color_list)

plt.show()

введите описание изображения здесь

0 голосов
/ 03 августа 2020

цветов относится к цветам столбцов (у вас есть только один столбец, поэтому используется только первый 'r'), одно решение - разделить на два pandas столбца, построить столбчатую полосу, чтобы все было в нужном месте:

left_side  = [l for l in 'qwertasdfgzxcvb']
right_side = [l for l in 'yuiophjklñnm,.-'] 

df['kpl'] = [x[1] if x[0] in (left_side) else None for x in zip(df.index, df.kp)]
df['kpr'] = [x[1] if x[0] in (right_side) else None for x in zip(df.index, df.kp)]

# Plot the graph
df[['kpl', 'kpr']].plot(
    kind = 'bar',
    figsize = (10,5),
    color = ['r', 'b'],
    stacked=True
)

введите описание изображения здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...