【问题标题】:Plotting pcolormesh in python from csv data从 csv 数据在 python 中绘制 pcolormesh
【发布时间】:2023-02-09 15:17:33
【问题描述】:

我正在尝试从我的 csv 文件中用 python 绘制 pcolormesh 图。但我被尺寸错误困住了。

我的 csv 看起来像这样:

ratio    5%   10%   20%   30%   40%   50%
1.2    0.60  0.63  0.62  0.66  0.66  0.77
1.5    0.71  0.81  0.75  0.78  0.76  0.77
1.8    0.70  0.82  0.80  0.73  0.80  0.78
1.2    0.75  0.84  0.94  0.84  0.76  0.82
2.3    0.80  0.92  0.93  0.85  0.87  0.86
2.5    0.80  0.85  0.91  0.85  0.87  0.88
2.9    0.85  0.91  0.96  0.96  0.86  0.87

我想制作 pcolormesh 图,其中 x 轴显示比率,y 轴显示 csv 标题,即 0.05, 0.1, 0.2, 0.3, 0.4, 0.5 并且该图包括来自 csv 第二列的值。

我试图在 python 中执行以下操作:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import warnings

warnings.filterwarnings('ignore')



df = pd.read_csv('./result.csv')
xlabel = df['ratio']
ylabel = [0.05, 0.1, 0.2, 0.3, 0.4, 0.5]

plt.figure(figsize=(8, 6))
df = df.iloc[:, 1:]

plt.pcolormesh(df, xlabel, ylabel, cmap='RdBu')
plt.colorbar()
plt.xlabel('rati0')
plt.ylabel('threshold')
plt.show()

但它不起作用。

我可以得到帮助来制作我想要的情节吗?

谢谢。

【问题讨论】:

    标签: python python-3.x csv matplotlib plot


    【解决方案1】:

    首先:忽略警告是一个非常糟糕的主意,尤其是在没有按预期工作的代码中。

    Xplt.colormesh 中的Y 定义了网格,即单元格的边缘,而不是单元格本身。水平和垂直方向的边都比单元格多一条。您需要在单独的步骤中标记中心。

    除此之外,您还必须更改顺序:当有 3 个未命名参数时,第一个是 X,第二个是 Y,第三个是颜色值。

    此外,数据框的列将是网格的列。您似乎想让它们成为网格的行。因此,应该转置数据帧。

    这就是您的代码的工作方式:

    import matplotlib.pyplot as plt
    import pandas as pd
    import numpy as np
    from io import StringIO
    
    df_str = '''ratio    5%   10%   20%   30%   40%   50%
    1.2    0.60  0.63  0.62  0.66  0.66  0.77
    1.5    0.71  0.81  0.75  0.78  0.76  0.77
    1.8    0.70  0.82  0.80  0.73  0.80  0.78
    1.2    0.75  0.84  0.94  0.84  0.76  0.82
    2.3    0.80  0.92  0.93  0.85  0.87  0.86
    2.5    0.80  0.85  0.91  0.85  0.87  0.88
    2.9    0.85  0.91  0.96  0.96  0.86  0.87'''
    df = pd.read_csv(StringIO(df_str), delim_whitespace=True)
    xlabel = df['ratio']
    ylabel = [0.05, 0.1, 0.2, 0.3, 0.4, 0.5]
    
    plt.figure(figsize=(8, 6))
    df = df.iloc[:, 1:]
    
    plt.pcolormesh(df.T, cmap='RdBu')
    plt.xticks(np.arange(len(xlabel)) + 0.5, xlabel)
    plt.yticks(np.arange(len(ylabel)) + 0.5, ylabel)
    plt.colorbar()
    plt.xlabel('ratio')
    plt.ylabel('threshold')
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 2016-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-01
      • 2017-12-12
      • 2015-01-30
      • 2017-11-19
      • 1970-01-01
      相关资源
      最近更新 更多