Matplotlib: точки таинственным образом меняются - PullRequest
0 голосов
/ 11 октября 2018

Я работаю над простой трехмерной анимацией в matplotlib в записной книжке IPython, но мои точки таинственным образом меняют альфа-значения:

import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d.axes3d as p3
import matplotlib.animation as animation
from IPython.display import HTML
import requests

%matplotlib inline

requests.get('https://gist.github.com/duhaime/023897b9bda70e7728c7db9792a11bd3/raw/b632e2ea9fb693f303908f546a684a3afcc329c0/data.npy')
X = np.load('data.npy')

def update_points(time, points):
  arr = np.array([[ X[time][i][0], X[time][i][1] ] for i in range(int(X.shape[1]))])
  points.set_offsets(arr) # set x, y values
  points.set_3d_properties(X[time][:,2][:], zdir='z') # set z value

def get_plot():
  fig = plt.figure()
  ax = p3.Axes3D(fig)
  ax.set_xlim(-10,10)
  ax.set_ylim(-10,10)
  ax.set_zlim(-10,10)
  points = ax.scatter(X[0][:,0][:], X[0][:,1][:], X[0][:,2][:]) # x,y,z vals
  return animation.FuncAnimation(fig,
    update_points,
    200,          # steps
    interval=100, # how often to refresh plot
    fargs=(points,),
    blit=False  
  ).to_jshtml()

HTML(get_plot())

Кто-нибудь знает, почему альфа-значения точек меняются?Любые предложения, которые могут предложить другие, будут очень полезны!

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Используйте аргумент depthshade Axes3d.scatter

depthshade Независимо от того, нужно ли затемнять маркеры рассеивания, чтобы создать видимость глубины.По умолчанию установлено значение True.

Установите это значение на False, чтобы не иметь альфа-изменений на вашем графике.

0 голосов
/ 11 октября 2018

Это не объясняет, что изменяет альфа-значения, но можно изменить их обратно на 1 в функции обновления:

import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d.axes3d as p3
import matplotlib.animation as animation
from IPython.display import HTML
import requests

%matplotlib inline

requests.get('https://gist.github.com/duhaime/023897b9bda70e7728c7db9792a11bd3/raw/b632e2ea9fb693f303908f546a684a3afcc329c0/data.npy')
X = np.load('data.npy')

def update_points(time, points):
  arr = np.array([[ X[time][i][0], X[time][i][1] ] for i in range(int(X.shape[1]))])
  points.set_offsets(arr) # set x, y values
  points.set_3d_properties(X[time][:,2][:], zdir='z') # set z value
  points.set_alpha(1)

def get_plot(lim=3):
  fig = plt.figure()
  ax = p3.Axes3D(fig)
  ax.set_xlim(-lim, lim)
  ax.set_ylim(-lim, lim)
  ax.set_zlim(-lim, lim)
  points = ax.scatter(X[0][:,0][:], X[0][:,1][:], X[0][:,2][:]) # x,y,z vals
  return animation.FuncAnimation(fig,
    update_points,
    200,          # steps
    interval=100, # how often to refresh plot
    fargs=(points,),
    blit=False  
  ).to_jshtml()

HTML(get_plot())
...