Нужна помощь в настройке 3D-коллекции полигонов с помощью mplot3d - PullRequest
0 голосов
/ 30 октября 2018

Я использую текущий код для создания 3D-графика на основе распространенного примера PolyCollection:

from mpl_toolkits.mplot3d import Axes3D
from matplotlib.collections import PolyCollection
from matplotlib.colors import colorConverter
import matplotlib.pyplot as plt
import numpy as np

#plt.xkcd()

fig = plt.figure()
ax = fig.gca(projection='3d')

def cc(arg):
    return colorConverter.to_rgba(arg, alpha=0.6)
cap = 0.55                      #initial capacity
xs = np.arange(0, 50, 0.02)     #Time
verts = []
zs = [0.0, 20.0, 40.0, 60.0, 85.0, 100.0, 125.0]    #Temps
ds = [.002, .005, .015, .03, .06, .10, .60]     #Discharge rates, percent per year
drain = [190, 212, 230, 285, 460, 600, 700] #Circuit drain in nA
drain = [(d+250) * 1e-9 for d in drain]         #Add in 250nA for ADC/etc, convert to A
idx = 0
for z in zs:
    ys = cap*((1-ds[idx])**xs) - drain[idx]*xs*8760
    ys[0], ys[-1] = 0, 0
    ys[ys<0] = np.nan
    verts.append(list(zip(xs, ys)))
    idx+=1

poly = PolyCollection(verts, facecolors=[cc('b'), cc('teal'), cc('g'),
                                         cc('y'), cc('orange'), cc('red'), cc('salmon')])
poly.set_alpha(0.7)
poly.set_edgecolor('k')
ax.add_collection3d(poly, zs=zs, zdir='x')
ax.set_title('Discharge Curves', loc='center')
ax.set_xlabel('Temperature (C)')
ax.set_xlim3d(0, 125)
ax.set_ylabel('Time (yrs)')
ax.set_ylim3d(0, 50)
ax.set_zlabel('Capacity (mAh)')
ax.set_zlim3d(0, 0.6)
ax.grid(True, lw=1, zorder=0)

plt.show()

В основном все работает нормально, но у меня есть пара проблем.

  1. Сетки не отображаются в ожидаемых плоскостях (например, x = 0, y = 0, z = 0). Когда отметки «0» для всех трех осей не совпадают в углу или вдоль краев, я сталкиваюсь с некоторыми проблемами параллакса, которые действительно отклоняют перспективу. Как я могу это исправить?
  2. При определенных углах обзора полигоны будут отображаться в неправильном порядке. Например, чирок будет казаться позади синего цвета, когда он на самом деле впереди. Что вызывает это?
  3. Включение стиля xkcd приводит к исчезновению линий сетки. Я пытался исправить это безрезультатно. Какая здесь разница? Я знаю, что видел 3D-графики xkcd с линиями сетки - это 3D, что разрушает их?
  4. Могу ли я изменить расстояние между метками и метками на 3D-графике? Может быть довольно трудно сказать, какая линия сетки соответствует какой температуре.
  5. Спасибо за внимание!

Parallax issue (orange curve appears to be at 80C

Orange curve is actually at 85C

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...