используйте pandas df.plot.scatter, чтобы создать фигуру с подзаговорами - PullRequest
1 голос
/ 26 февраля 2020

Здравствуйте, как я могу сделать фигуру с разбросом, используя pandas? Он работает с графиком, но не с разбросом.

Вот пример

import numpy as np
import pandas as pd
matrix = np.random.rand(200,5)

df = pd.DataFrame(matrix,columns=['index','A','B','C','D'])

#single plot, working with 
df.plot(
        kind='scatter',
        x='index',
        y='A',
        s= 0.5
        )

# not workig
df.plot(
        subplots=True,
        kind='scatter',
        x='index',
        y=['A','B','C'],
        s= 0.5
        )

Ошибка

raise ValueError(self._kind + " requires an x and y column")
ValueError: scatter requires an x and y column

Редактировать: Решение сделать фигура с сюжетами с использованием df.plot (Спасибо @Fourier)

import numpy as np
import pandas as pd

matrix = np.random.rand(200,5)#random data
df = pd.DataFrame(matrix,columns=['index','A','B','C','D']) #make df

#get a list for subplots
labels = list(df.columns)
labels.remove('index')

df.plot(
  layout=(-1, 5), 
  kind="line", 
  x='index', 
  y=labels, 
  subplots = True, 
  sharex = True, 
  ls="none", 
  marker="o")

1 Ответ

1 голос
/ 26 февраля 2020

Будет ли это работать для вас:

import pandas as pd
import numpy as np

df = pd.DataFrame({"index":np.arange(5),"A":np.random.rand(5),"B":np.random.rand(5),"C":np.random.rand(5)})

df.plot(kind="line", x="index", y=["A","B","C"], subplots=True, sharex=True, ls="none", marker="o")

Вывод

enter image description here

Примечание: это использует линейный сюжет с невидимыми линиями. Для разброса я бы go и l oop над ним.

for column in df.columns[:-1]: #[:-1] ignores the index column for my random sample
    df.plot(kind="scatter", x="index", y=column)

РЕДАКТИРОВАТЬ

Для добавления пользовательских ylabels вы можете сделать следующее :

axes = df.plot(kind='line', x="index", y=["A","B","C"], subplots=True, sharex=True, ls="none", marker="o", legend=False)

ylabels = ["foo","bar","baz"]

for ax, label in zip(axes, ylabels):    
    ax.set_ylabel(label)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...