如何在matplotlib中为上三角矩阵绘制轮廓?

时间:2019-01-03 21:19:17

标签: matplotlib matrix contour triangular

我想在散点图上为z = 0.35的数据添加等高线图。

这是我的数据:

 X               Y         Z
0.100        0.500        0.455     
0.100        1.000        0.453     
0.100        1.500        0.451     
0.100        2.000        0.449     
0.100        3.000        0.448     
0.100        4.000        0.445     
0.100        5.000        0.442     
0.100        6.000        0.437     
0.100        7.000        0.425     
0.100        8.000        0.411     
0.100        9.000        0.398     
0.100        10.000       0.383     
0.100        10.500       0.375     
0.100        11.000       0.364     
0.100        11.300       0.357     
0.100        11.500       0.349     
0.100        11.800       0.336     
0.100        12.000       0.324     
0.100        12.300       0.299     
0.100        12.500       0.269     
0.500        1.000        0.452     
0.500        1.500        0.450     
0.500        2.000        0.449     
0.500        3.000        0.447     
0.500        4.000        0.445     
0.500        5.000        0.442     
0.500        6.000        0.437     
0.500        7.000        0.424     
0.500        8.000        0.410     
0.500        9.000        0.396     
0.500        10.000       0.382     
0.500        10.500       0.373     
0.500        11.000       0.362     
0.500        11.300       0.355     
0.500        11.500       0.347     
0.500        11.800       0.334     
0.500        12.000       0.322     
0.500        12.300       0.297     
0.500        12.500       0.267     
1.000        1.500        0.448     
1.000        2.000        0.448     
1.000        3.000        0.446     
1.000        4.000        0.444     
1.000        5.000        0.441     
1.000        6.000        0.436     
1.000        7.000        0.422     
1.000        8.000        0.407     
1.000        9.000        0.394     
1.000        10.000       0.379     
1.000        10.500       0.371     
1.000        11.000       0.360     
1.000        11.300       0.352     
1.000        11.500       0.345     
1.000        11.800       0.330     
1.000        12.000       0.319     
1.000        12.300       0.293     
1.000        12.500       0.263     
1.500        2.000        0.447     
1.500        3.000        0.445     
1.500        4.000        0.442     
1.500        5.000        0.439     
1.500        6.000        0.434     
1.500        7.000        0.420     
1.500        8.000        0.405     
1.500        9.000        0.392     
1.500        10.000       0.377     
1.500        10.500       0.368     
1.500        11.000       0.357     
1.500        11.300       0.350     
1.500        11.500       0.342     
1.500        11.800       0.328     
1.500        12.000       0.316     
1.500        12.300       0.290     
2.000        3.000        0.443     
2.000        4.000        0.441     
2.000        5.000        0.439     
2.000        6.000        0.433     
2.000        7.000        0.418     
2.000        8.000        0.403     
2.000        9.000        0.388     
2.000        10.000       0.374     
2.000        10.500       0.365     
2.000        11.000       0.354     
2.000        11.300       0.347     
2.000        11.500       0.339     
2.000        11.800       0.325     
2.000        12.000       0.313     
2.000        12.300       0.287     
2.000        12.500       0.256     
3.000        4.000        0.439     
3.000        5.000        0.437     
3.000        6.000        0.431     
3.000        7.000        0.413     
3.000        8.000        0.397     
3.000        9.000        0.382     
3.000        10.000       0.368     
3.000        10.500       0.359     
3.000        11.000       0.348     
3.000        11.300       0.341     
3.000        11.500       0.333     
3.000        11.800       0.318     
3.000        12.000       0.306     
3.000        12.300       0.280     
3.000        12.500       0.248     
4.000        5.000        0.435     
4.000        6.000        0.427     
4.000        7.000        0.406     
4.000        8.000        0.388     
4.000        9.000        0.375     
4.000        10.000       0.360     
4.000        10.500       0.351     
4.000        11.000       0.340     
4.000        11.300       0.333     
4.000        11.500       0.325     
4.000        11.800       0.310     
4.000        12.000       0.298     
4.000        12.300       0.270     
4.000        12.500       0.239     
5.000        6.000        0.418     
5.000        7.000        0.392     
5.000        8.000        0.375     
5.000        9.000        0.363     
5.000        10.000       0.350     
5.000        10.500       0.341     
5.000        11.000       0.330     
5.000        11.300       0.324     
5.000        11.500       0.315     
5.000        11.800       0.300     
5.000        12.000       0.288     
5.000        12.300       0.260     
5.000        12.500       0.228     
6.000        7.000        0.368     
6.000        8.000        0.356     
6.000        9.000        0.347     
6.000        10.000       0.337     
6.000        10.500       0.329     
6.000        11.000       0.318     
6.000        11.300       0.313     
6.000        11.500       0.304     
6.000        11.800       0.289     
6.000        12.000       0.276     
6.000        12.300       0.247     
6.000        12.500       0.214     
7.000        8.000        0.346     
7.000        9.000        0.339     
7.000        10.000       0.329     
7.000        10.500       0.322     
7.000        11.000       0.311     
7.000        11.300       0.305     
7.000        11.500       0.296     
7.000        11.800       0.280     
7.000        12.000       0.267     
7.000        12.300       0.237     
7.000        12.500       0.202     
8.000        9.000        0.332     
8.000        10.000       0.322     
8.000        10.500       0.315     
8.000        11.000       0.303     
8.000        11.300       0.297     
8.000        11.500       0.287     
8.000        11.800       0.270     
8.000        12.000       0.256     
8.000        12.300       0.224     
8.000        12.500       0.188     
9.000        10.000       0.314     
9.000        10.500       0.305     
9.000        11.000       0.293     
9.000        11.300       0.287     
9.000        11.500       0.276     
9.000        11.800       0.257     
9.000        12.000       0.242     
9.000        12.300       0.208     
9.000        12.500       0.170     
10.000       10.500       0.292     
10.000       11.000       0.277     
10.000       11.300       0.273     
10.000       11.500       0.259     
10.000       11.800       0.236     
10.000       12.000       0.220     
10.000       12.300       0.182     
10.000       12.500       0.143     
10.500       11.000       0.264     
10.500       11.300       0.264     
10.500       11.500       0.247     
10.500       11.800       0.221     
10.500       12.000       0.203     
10.500       12.300       0.164     
10.500       12.500       0.123     
11.000       11.300       0.264     
11.000       11.500       0.235     
11.000       11.800       0.202     
11.000       12.000       0.182     
11.000       12.300       0.140     
11.000       12.500       0.098     
11.300       11.500       0.190     
11.300       11.800       0.165     
11.300       12.000       0.150     
11.300       12.300       0.111     
11.300       12.500       0.072     
11.500       11.800       0.150     
11.500       12.000       0.136     
11.500       12.300       0.096     
11.500       12.500       0.058     
11.800       12.000       0.118     
11.800       12.300       0.074     
11.800       12.500       0.036     

1 个答案:

答案 0 :(得分:0)

我很难解释您的问题,但我认为您希望在散点图中绘制一条指示z=0.35的轮廓线。为此,您需要先将Z数据插值到常规XY网格中(例如,使用scipy.interpolate.griddata)。然后,您可以绘制插值数据的轮廓:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from scipy.interpolate import griddata

# Read the input data
data = pd.read_csv("data.csv", names=("x", "y", "z"), delim_whitespace=True, header=0)

# Create interpolation grid
xi = np.linspace(data["x"].min(), data["x"].max(), 100)
yi = np.linspace(data["y"].min(), data["y"].max(), 100)
Xi, Yi = np.meshgrid(xi, yi)
points = np.array([data["x"], data["y"]]).T
outpoints = np.array([Xi, Yi]).T

# Interpolate z-values on grid
zi = griddata(points=points, values=data["z"], xi=outpoints, method="cubic")

# Plot contour line at z=0.35
CS = plt.contour(xi, yi, zi.T, levels=[0.35], colors="k")
plt.clabel(CS)

# Plot scatter on top of contour
plt.scatter(data["x"], data["y"], c=data["z"], cmap="Blues", s=5)
plt.colorbar()
plt.show()

结果:

enter image description here