Как построить простой фрейм данных с разными переменными с разными цветами - PullRequest
0 голосов
/ 28 сентября 2019

Доброе утро всем, моя проблема в графическом представлении данных.Мой фрейм данных похож на тот, который показан ниже

     Country  Year    average_man      average_woman
0         I1  2015       9.500000           3.663500
1         I1  2016       8.000000           4.810500
2         I2  2015      12.181818           3.514545
3         I2  2016      14.727273           2.815000

Я хотел бы представить всю информацию, представленную на одном графике, но я не знаю, как назначить больше переменных одной и той же оси.Сейчас я попытался построить average_men и country , но я не могу назначить разные цвета для каждой точки для каждого года.Например, синий для 2015 года и красный для 2016 года.

Мой участок:

my plot

Мой код:

plt.scatter(df['average_man'], df['average_woman'], cmap= df['Year'])

plt.show()

Ожидаемый результат enter image description here

Ответы [ 2 ]

0 голосов
/ 28 сентября 2019

Я создал словарь, который связывает цвета со странами:

import matplotlib.pyplot as plt
import pandas as pd

# read csv
df = pd.read_csv('test2.txt', delim_whitespace=True)

# find all unique countries, which shall correspond to a color
countries = df['Country'].unique()
custom_colors = ['r','b','g','orange']

# create a dictionary associating a color to a country
col_dict = {country:custom_colors[i] for i, country in enumerate(countries)}

# extend dataframe by new column with country colors
df['country_colors'] = [col_dict[country] for country in df['Country']]


# plot scatteplot while using c= as a container for colors.
# This is what makes scatter special: color argument can be a container
# of many different colors
fig, ax = plt.subplots(figsize=(7,4))

X,Y,col = df['average_man'], df['Country'], df['country_colors']
ax.scatter(X,Y,c=col)

Комментарии моего кода должны объяснить все.Но общая идея состоит в том, чтобы найти все уникальные страны, связать цвет со всеми уникальными странами, а затем добавить новый столбец в DataFrame с правильными цветами в правильных позициях: например, все строки с 'I1' имеют цвет 'r' вфрейм данных.

0 голосов
/ 28 сентября 2019

Вы можете попробовать это:

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

# Method 1, to plot individual columns
# a scatter plot 
df.plot(kind='scatter',x='average_man',y='average_woman',color='red')
plt.show()

# Method 2, To plot all columns separately
df.plot(subplots=True)
plt.tight_layout()
plt.show()

#Method 3, preferred
data = np.random.rand(10,4)
data[:,0]= np.arange(10)
df = pd.DataFrame(data, columns=["X", "A", "B", "C"])
axis = df.plot(x="X", y="A", kind="bar")
df.plot(x="X", y="B", kind="bar", ax=axis, color="C2")
df.plot(x="X", y="C", kind="bar", ax=axis, color="C3")
plt.show()
...