我想从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")
电流输出:
最佳答案
一种简单的方法是将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中的连续变量确定,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56744970/