Диаграмма рассеяния в dataframe1 со стилем маркера, определяемым непрерывной переменной в dataframe2 - PullRequest
1 голос
/ 25 июня 2019

Я хотел бы построить данные из DataFrame1 со стилем маркера, определяемым значением непрерывной переменной в DataFrame2.

DataFrame1 содержит информацию о разнице скоростей во времени по месяцам.DataFrame2 содержит результаты теста статистической значимости.

Я хотел бы указать, когда различия значительны, изменив стиль маркера, если значения меньше 0.05.

То, что у меня есть, покажет DataFrame1 хорошо, ноЯ не уверен, как включить df2.Возможно путем архивирования данных?


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

# Some fake data
months = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec')
periods = np.arange(1950, 1960, 1)  
df1 = pd.DataFrame(np.random.randn(10,12), index=periods, columns=months)   # Value to be plotted
df2 = pd.DataFrame(np.random.rand(10,12), index=periods, columns=months)    # Determine marker shape

colors = cm.rainbow(np.linspace(0, 1.1, len(months)))

plt.figure(figsize=(10, 6))  
for c, mmm in zip(colors, months):
    plt.scatter(df1.index, df1[mmm], color=c)
plt.legend(loc='center left', bbox_to_anchor=(1, 0.5))
plt.title("Change in speed")

Токовый выход: enter image description here

1 Ответ

0 голосов
/ 25 июня 2019

Один простой способ - разделить ваши dataframe1 на вспомогательные субкадры: один для значений dataframe2 ниже, другой для значений выше. Затем вы можете сделать два scatter звонка с разными маркерами.

Примечание: поскольку мы делаем два точечных графика в месяц, метка месяца в легенде дублируется. Я решаю эту проблему, установив один из них на '', а другой на соответствующий month.

Вот весь код:

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

# Some fake data
months = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec')
periods = np.arange(1950, 1960, 1)  
df1 = pd.DataFrame(np.random.randn(10,12), index=periods, columns=months)   # Value to be plotted
df2 = pd.DataFrame(np.random.rand(10,12), index=periods, columns=months)    # Determine marker shape

colors = cm.rainbow(np.linspace(0, 1.1, len(months)))

plt.figure(figsize=(10, 6))  
for c, mmm in zip(colors, months):
    # First sub dataframe1 where df2 values are below 0.05
    df1_plot_below = df1[df2[mmm] < 0.05]
    plt.scatter(df1_plot_below.index, df1_plot_below[mmm], color=c, marker="v", label="")

    # First sub dataframe1 where df2 values are above 0.05
    df1_plot_above = df1[df2[mmm] >= 0.05]
    plt.scatter(df1_plot_above.index, df1_plot_above[mmm], color=c, marker="^", label=mmm)

plt.legend(loc='center left', bbox_to_anchor=(1, 0.5))
plt.title("Change in speed")
plt.show()

Выход: enter image description here

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