Я пытаюсь построить 2D-данные на 3D-оси. У меня есть 3D-форма, работающая с использованием ax.plot_surface
, но я не могу заставить 2D-данные располагаться заподлицо со стенками оси, используя ax.plot
.
Вот урезанный пример кода, показывающий проблему, с которой я столкнулся с 2D-данными:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# Generate Example Data
x = [0.04,0,-0.04]
y = [0.04,0,-0.04]
z = [0.04,0,-0.04]
# Start plotting environment
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# Plot 3 lines positioned against the axes "walls"
ax.plot(x,y,-0.08,zdir='z',c='r')
ax.plot(x,z, 0.08,zdir='y',c='g')
ax.plot(y,z,-0.08,zdir='x',c='b')
# Label each axis
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
# Set each axis limits
ax.set_xlim([-0.08,0.08])
ax.set_ylim([-0.08,0.08])
ax.set_zlim([-0.08,0.08])
# Equally stretch all axes
ax.set_aspect("equal")
# Set plot size for saving to disk
plt.gcf().set_size_inches(11.7,8.3)
# Save figure in .eps and .png format
plt.savefig('test.eps', format='eps')
plt.savefig('test.png', format='png', dpi=300)
# Display figure
plt.show()
Это дает следующий результат, из которого вы можете увидеть, что концы строк данных не совпадают с осевыми линиями (т. е. не совпадают с 0,04 и -0,04):
Изучая график в интерактивном режиме, я определил, что изменение 0,08 в вызовах ax.plot
на величину 0,083 (при сохранении соответствующих знаков) позволяет графикам гораздо более плоско прилегать к стене.
Моя интерпретация этого заключается в том, что график не обеспечивает соблюдение ограничений моей оси, что становится очевидным на графике, если посмотреть на интервалы, где встречаются оси, но с использованием ax.get_xlim()
и т. Д. Показывает значения, которые я установил, поэтому я что-то упускаю.
Любые идеи о том, как я могу заставить эти участки сидеть вровень со стенами?
Огромное спасибо,
Тим
Изменить:
Я также попытался установить пределы оси, используя
ax.set_xlim3d(-0.08,0.08)
ax.set_ylim3d(-0.08,0.08)
ax.set_zlim3d(-0.08,0.08)
и
ax.set_xlim3d([-0.08,0.08])
ax.set_ylim3d([-0.08,0.08])
ax.set_zlim3d([-0.08,0.08])
без везения.
Я определенно склоняюсь к тому, чтобы приписать это проблеме заполнения, когда оси встречаются, но я не могу найти никакой документации по этому поводу. т.е. Я устанавливаю положение графика на -0,08 и предел оси на -0,08, но график добавляет небольшое дополнение в конце, чтобы сделать пределы где-то между -0,082 и -0,083.
Я либо хочу удалить дополнение, либо получить значение заполнения, чтобы я мог ввести его в команду ax.plot
.
Изменить2:
Кто-то еще, кто столкнулся с этой проблемой, но не решил проблему Изменение положения стен сетки в фигуре mplot3d