我想从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")



电流输出:
python - dataframe1的散点图,其标记样式由dataframe2中的连续变量确定-LMLPHP

最佳答案

一种简单的方法是将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()


输出:
python - dataframe1的散点图,其标记样式由dataframe2中的连续变量确定-LMLPHP

关于python - dataframe1的散点图,其标记样式由dataframe2中的连续变量确定,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56744970/

10-12 19:38