我有一个pandas数据框,我在其中绘制了12列中的两列,一列为x轴,另一列为y轴 . x轴只是一个时间序列,y轴是粗略的-5000到5000之间的随机整数 .
有没有办法只使用这两列来制作散点图,其中y的正值是某种颜色而负颜色是另一种颜色?
我尝试了很多变化,但无法得到任何东西 . 我尝试使用seaborn colormaps和booleans mask为delta / positive数字分散颜色贴图,colormeshs . 我没办法 .
使用色彩图对分散点进行着色的想法当然是合理的 . 如果您正在使用 plt.scatter 图,则可以提供颜色图在 c 参数中选择颜色的值 .
plt.scatter
c
这里你只需要两个值,所以 c= np.sign(df.y) 将是一个合适的选择 .
c= np.sign(df.y)
import matplotlib.pyplot as plt import numpy as np import pandas as pd df = pd.DataFrame({'x': np.arange(25), 'y': np.random.normal(0,2500,25)}) fig, ax = plt.subplots() ax.scatter(df.x, df.y, c=np.sign(df.y), cmap="bwr") plt.show()
使用布尔掩码和where关键字创建2个单独的数据帧 . 条件是if> 0或不是 . 然后逐个绘制两个数据帧,一个在另一个顶部,使用不同的颜色参数 .
拆分数据框并分别绘制它们:
import matplotlib.pylab as plt import numpy as np import pandas as pd df = pd.DataFrame({'x': np.arange(20), 'y': np.random.randn(20)}) # split dataframes df_plus = df[df.y >= 0] df_minus = df[df.y < 0] print df_plus print df_minus fig = plt.figure() ax = fig.add_subplot(1, 1, 1) # plot scatter ax.scatter(df_plus.x, df_plus.y, color='r') ax.scatter(df_minus.x, df_minus.y, color='b') ax.autoscale() plt.show()
如果您希望绘制负数据帧为正写 df.minus.y = -df_minus.y .
df.minus.y = -df_minus.y
3 回答
使用色彩图对分散点进行着色的想法当然是合理的 . 如果您正在使用
plt.scatter
图,则可以提供颜色图在c
参数中选择颜色的值 .这里你只需要两个值,所以
c= np.sign(df.y)
将是一个合适的选择 .使用布尔掩码和where关键字创建2个单独的数据帧 . 条件是if> 0或不是 . 然后逐个绘制两个数据帧,一个在另一个顶部,使用不同的颜色参数 .
拆分数据框并分别绘制它们:
如果您希望绘制负数据帧为正写
df.minus.y = -df_minus.y
.