···
#########################################################################
#
#########################################################################
def equalize_plotlimits_3d(ax):
xl = ax.get_xlim()
yl = ax.get_ylim()
zl = ax.get_zlim()
xr = xl[1] - xl[0]
yr = yl[1] - yl[0]
zr = zl[1] - zl[0]
xave = (xl[1] + xl[0])/2
yave = (yl[1] + yl[0])/2
zave = (zl[1] + zl[0])/2
maxr = max([xr,yr,zr])
ax.set_xlim(xave-maxr/2, xave+maxr/2)
ax.set_ylim(yave-maxr/2, yave+maxr/2)
ax.set_zlim(zave-maxr/2, zave+maxr/2)
xl = ax.get_xlim()
yl = ax.get_ylim()
zl = ax.get_zlim()
return [xl,yl,zl]
#########################################################################
#
#########################################################################
def pan(axis, shift, ax=None, dodraw=True):
if not ax: ax = gca()
which = dict(x=0,y=1,z=2)
setter = [ax.set_xlim, ax.set_ylim, ax.set_zlim]
getter = [ax.get_xlim, ax.get_ylim, ax.get_zlim]
lim = getter[which[axis]]()
lim[0] += shift
lim[1] += shift
setter[which[axis]](lim)
if dodraw:
draw()
def xpan(*args, **kwargs):
pan('x', *args, **kwargs)
def ypan(*args, **kwargs):
pan('y', *args, **kwargs)
def zpan(*args, **kwargs):
pan('z', *args, **kwargs)
#########################################################################
#
#########################################################################
def zoom(scale, ax=None, dodraw=True):
if not ax: ax = gca()
xl = ax.get_xlim()
yl = ax.get_ylim()
zl = ax.get_zlim()
xr = xl[1] - xl[0]
yr = yl[1] - yl[0]
zr = zl[1] - zl[0]
xave = (xl[1] + xl[0])/2
yave = (yl[1] + yl[0])/2
zave = (zl[1] + zl[0])/2
maxr = max([xr,yr,zr])
ax.set_xlim(xave-maxr/2/scale, xave+maxr/2/scale)
ax.set_ylim(yave-maxr/2/scale, yave+maxr/2/scale)
ax.set_zlim(zave-maxr/2/scale, zave+maxr/2/scale)
xl = ax.get_xlim()
yl = ax.get_ylim()
zl = ax.get_zlim()
if dodraw:
draw()
On 3/1/18 11:44 AM, Benjamin Root wrote:
Sorry, those features are just not possible with the current design. The
code assumes that all rotations are done from the center. And the tick
marks aren't handled the same way they are in 2D graphs, unfortunately.
Also, the code has just three backing panels. It is possible to make one
or more of them invisible, but you can't add more panels. In fact, you
wouldn't want other panels to appear because it is assumed that these
panels will always appear behind any other artists. Any other panels
would run the risk of being composed incorrectly with the contents of
the plot, creating "Escher effects" -- visual paradoxes. Nothing is
stopping you, though, from putting in your own panel from a Poly3D or
Patch3D object. In fact, you can just create a Patch artist and put it
through the 2d to 3d converter function in mplot3d.art3d.
I would consider the current state of tick control to be buggy, and I
agree that effort should be spent fixing it. Having the ability to
specify an arbitrary point of rotation is an interesting feature and I
wouldn't be opposed to a merge request adding that feature.
On Thu, Mar 1, 2018 at 8:30 AM, fosa <jayme.c.fosa at gmail.com > <mailto:jayme.c.fosa at gmail.com>> wrote:
Hello,
I've been trying to no avail to use the settings that usually work with
matplotlib 2D.? I'd like to remove the 3D graph ticks, and extend the
darkened color edge to the upper sides as well.? As a bonus if
someone knows
how to control the axis of rotation for a 3d animation, to effectively
control the centering, that would be a great help as well.
Here is a self contained code block that I've been hacking away at
with a
dull knife:
import numpy as np
import matplotlib as mpl
from matplotlib import pyplot as plt
from matplotlib import animation
from mpl_toolkits.mplot3d import Axes3D
mpl.rcParams['ytick.color'] = 'white'
#mpl.rcParams['ytick.left'] = False
sample = np.random.random_integers(low=1,high=5, size=(10,3))
# Create a figure and a 3D Axes
fig = plt.figure(figsize=(5,5))
ax = Axes3D(fig)
#ax.w_xaxis.set_tick_params(color='white')
#ax.axes.tick_params
ax.axes.tick_params(bottom=False, color='blue')
##['size', 'width', 'color', 'tickdir', 'pad', 'labelsize',
##'labelcolor', 'zorder', 'gridOn', 'tick1On', 'tick2On',
##'label1On', 'label2On', 'length', 'direction', 'left', 'bottom',
##'right', 'top', 'labelleft', 'labelbottom',
##'labelright', 'labeltop', 'labelrotation']
colors = np.mean(sample[:, :], axis=1)
ax.scatter(sample[:,0], sample[:,1], sample[:,2],
? ? ? ? ? ?marker='o', s=20, c=colors, alpha=1)
ax.tick_params(color='red')
ax.spines['left'].set_color('green')
frame1 = plt.gca()
frame1.axes.xaxis.set_visible(False)
#frame1.axes.xaxis.axes.set_xticks()
frame1.axes.xaxis.set_ticklabels()
frame1.axes.yaxis.set_ticklabels()
frame1.axes.zaxis.set_ticklabels()
#frame1.axes.yaxis.set_tick_params(color='white')
And the image it generates:
<http://matplotlib.1069221.n5.nabble.com/file/t5138/3dSO.png
<http://matplotlib.1069221.n5.nabble.com/file/t5138/3dSO.png>>
Setting #frame1.axes.xaxis.axes.set_xticks() causes all the grid
lines to
disappear, instead of just the ticks themselves.
Is it required to go into whatever is drawing/rendering and adjust the
length of the grid line? T_T
--
Sent from:
http://matplotlib.1069221.n5.nabble.com/matplotlib-users-f3.html
<http://matplotlib.1069221.n5.nabble.com/matplotlib-users-f3.html>
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users at python.org <mailto:Matplotlib-users at python.org>
Matplotlib-users Info Page
<https://mail.python.org/mailman/listinfo/matplotlib-users>
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users at python.org
Matplotlib-users Info Page