#python
#python
Вопрос:
используя приведенный ниже код, я создаю трехмерные данные для построения pcolormesh
графика.
n = 100 # size
_min, _max = -10, 10
# generate 2 2d grids for the x amp; y bounds
x, y = np.meshgrid(np.linspace(_min, _max, n), np.linspace(_min, _max, n))
# generate z values with random noise
z = np.array([np.zeros(n) for i in range(n)])
for i in range(len(z)):
z[i] = z[i] 0.1 * np.random.randint(0,3, size=len(z[i]))
# plotting
fig, ax = plt.subplots()
c = ax.pcolormesh(x, y, z, cmap='RdBu', vmin=-1, vmax=1)
ax.set_title('pcolormesh')
plt.plot([5,5,-2.5], [5,-5,5], color='darkblue', marker='o', markersize=15, linewidth=0) # dots (outer)
plt.plot([5,5,-2.5], [5,-5,5], color='lightblue', marker='o', markersize=10, linewidth=0) # dots (inner)
plt.grid(b=True) # background grid
# set the limits of the plot to the limits of the data
ax.axis([_min, _max, _min, _max])
fig.colorbar(c, ax=ax)
plt.show()
Это дает изображение:
Однако теперь я хотел бы изменить z
значения конкретных x
/ y
комбинаций в соответствии с конкретными функциями, например, круг, описанный (x-5)^2 (y 5)^2 = 1
. Я хотел бы изменить данные (!), А затем отобразить их.
«Целью» будут данные, создающие изображение, подобное этому:
Я могу экспериментировать с функциями, в основном речь идет о логике изменения z
значений в соответствии с математической функцией формы z = f(x, y)
, которую я не могу понять.
Это будет следовать (логике псевдокода): if the x / y combination of a point is on the function f(x, y): add the value c to the initial z value
.
Может ли кто-нибудь указать мне, как я могу это реализовать? Я пытался несколько раз, но не могу понять это … : ( Заранее большое спасибо!!!
ПРИМЕЧАНИЕ: более ранняя версия была неточной. Это ошибочно объяснено как проблема построения графика, хотя кажется, что проблема заключается в манипулировании данными. Извиняюсь за это!
Ответ №1:
Вам нужно только построить функцию таким же образом.
С помощью этих строк я строю функцию на вашем графике.
# Create the independent points of your plot
x = np.arange(0., 5., 0.2)
# Generate your dependent variables
y = np.exp(x)
# Plot your variables
plt.plot(x, y)
Затем вы могли бы сделать это несколько раз.
В вашем полном примере это выглядит так:
import numpy as np
import matplotlib.pyplot as plt
n = 100 # size
_min, _max = -10, 10
# generate 2 2d grids for the x amp; y bounds
x, y = np.meshgrid(np.linspace(_min, _max, n), np.linspace(_min, _max, n))
# generate z values with random noise
z = np.array([np.zeros(n) for i in range(n)])
for i in range(len(z)):
z[i] = z[i] 0.1 * np.random.randint(0, 3, size=len(z[i]))
# plotting
fig, ax = plt.subplots()
c = ax.pcolormesh(x, y, z, cmap='RdBu', vmin=-1, vmax=1)
ax.set_title('pcolormesh')
plt.plot([5, 5, -2.5], [5, -5, 5], color='darkblue', marker='o', markersize=15, linewidth=0) # dots (outer)
plt.plot([5, 5, -2.5], [5, -5, 5], color='lightblue', marker='o', markersize=10, linewidth=0) # dots (inner)
plt.grid(b=True) # background grid
# set the limits of the plot to the limits of the data
ax.axis([_min, _max, _min, _max])
fig.colorbar(c, ax=ax)
x = np.arange(0., 5., 0.2)
plt.plot(x, np.exp(x))
plt.show()
Конечно, вам нужно изменить строку y = np.exp(x)
с помощью любой функции, которая вам нужна.
Комментарии:
1. Спасибо! Я понял, что мой вопрос был неправильно сфокусирован — часть построения была неправильно подчеркнута! Вместо этого проблема заключается в манипулировании данными (s. обновленный вопрос). Ваше решение хорошо подходит для первоначального вопроса — спасибо вам за это! — но как мне манипулировать данными в соответствии с математической функцией?