【问题标题】:Change color of scatter points depending on limits/condition根据限制/条件更改散点的颜色
【发布时间】:2022-01-13 20:43:06
【问题描述】:

我正在从一个 excel 文件创建绘图,如使用 pandas 所示:

这是我正在使用的代码:

ax1.plot(data2["E_x"], data2["E_y"], '--', color ='black',  linewidth=2, label="Equi")
ax1.plot(data2["X"], data2["Y"], 'o', color ='black', markersize=8, label="Spinal Cord")
ax1.hlines(y=4500, xmin=0, xmax=4500, color ='black')
ax1.vlines(x=4500, ymin=0, ymax=4500, color ='black')
ax1.set_xlim([0,5000])
ax1.set_ylim([0,5000])

我想将实线 (

提前致谢!

链接到sample data

【问题讨论】:

    标签: python pandas dataframe matplotlib colors


    【解决方案1】:

    如果您使用散点图(相对于没有线条的线图),您可以使用 c 关键字为每个点指定颜色列表。然后,根据您想要的任何标准,使用每个数据点的列表推导很容易生成关键字列表。

    您甚至可以使用 pandas 内置的绘图功能。

    所以不是这一行

    ax1.plot(data2["X"], data2["Y"], 'o', color ='black', markersize=8, label="Spinal Cord")
    

    使用

    data2.plot.scatter(x = 'X', 
                       y = 'Y', 
                       c = ['r' if x else 'g' for x in (data2.X < 4500) & (data2.Y < 4500)],
                       ax = ax1
                      )
    

    如果你愿意,你仍然可以直接使用 matplotlib

    ax1.scatter(x = 'X', 
                y = 'Y', 
                c = ['r' if x else 'g' for x in (data2.X < 4500) & (data2.Y < 4500)],
                data = data2
               )
    

    这两个都应该在边界内绘制红色,在边界外绘制绿色。

    【讨论】:

    • 感谢您的回复。这是我用来格式化图中点的最终代码: data2.plot.scatter(x = "X", y="Y", ax = ax1, c = ['b' if x else 'r'对于 x in (data2.X
    【解决方案2】:

    使用过滤器时,应为 x 和 y 使用相同的过滤器。这样,两者保持相同的长度。您可以使用~ 与给定过滤器相反。这是一个例子:

    from matplotlib import pyplot as plt
    import numpy as np
    
    fig, ax1 = plt.subplots(figsize=(10, 5))
    ax1.plot([0, 5000], [0, 5000], '--', color='black', linewidth=2, label="Equi")
    x = np.random.uniform(500, 5000, 50)
    y = x + np.random.normal(0, 300, len(x))
    filter = (x < 4500) & (y < 4500)
    ax1.plot(x[filter], y[filter], 'o', color='lime', markersize=8, label="Spinal Cord")
    ax1.plot(x[~filter], y[~filter], 'o', color='crimson', markersize=8, label="Spinal Cord")
    ax1.hlines(y=4500, xmin=0, xmax=4500, color='black')
    ax1.vlines(x=4500, ymin=0, ymax=4500, color='black')
    ax1.set_xlim([0, 5000])
    ax1.set_ylim([0, 5000])
    
    plt.tight_layout()
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-08
      • 1970-01-01
      • 1970-01-01
      • 2013-08-28
      • 1970-01-01
      • 2019-02-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多