Как построить контур для верхней треугольной матрицы в Matplotlib? - PullRequest
0 голосов
/ 04 января 2019

Я хочу добавить контурную диаграмму на моих данных для 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 голосов
/ 04 января 2019

Мне было немного трудно интерпретировать ваш вопрос, но я думаю, что вы хотите, чтобы одна контурная линия, обозначающая 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

...