开发者

Axes3D Data Labels and Plot Limits

开发者 https://www.devze.com 2023-02-09 16:17 出处:网络
Below is a small snippet the illustrates the problem I\'m having related to the size of the cube used in an Axes3D instance from matplotlib and the cutting off of axis labels.While I can change the ba

Below is a small snippet the illustrates the problem I'm having related to the size of the cube used in an Axes3D instance from matplotlib and the cutting off of axis labels. While I can change the background color of the figure canvas pretty easily, this still causes the text located on the labels to become distorted. Does anyone have an idea how best to change the actual size of the 3D box used to plot data? Simply changing the subplot dimensions doesn't seem to help. This behavior is best illustrated by running the code. Once plotted, the date formatted t开发者_如何学运维ext changes in color with one end becoming slightly darker. Any help is appreciated.

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.dates as dates
import datetime, random
import matplotlib.ticker as ticker

def random_date():
      date = datetime.date(2008, 12,01)
      while 1:
        date += datetime.timedelta(days=30)
        yield (date)

def format_date(x, pos=None):
     return dates.num2date(x).strftime('%Y-%m-%d') #use FuncFormatter to format dates

r_d = random_date()
some_dates = [dates.date2num(r_d.next()) for i in range(0,20)]


fig = plt.figure(facecolor = 'k')
ax = fig.add_subplot(111, projection='3d')
fig.subplots_adjust(left=0.1, bottom=0.1, right=0.9, top=0.9)


for c, z in zip(['r', 'g', 'b', 'y'], [30, 20, 10, 0]):
    xs = np.array(some_dates)
    ys = np.random.rand(20)
    ax.bar(xs, ys, zs=z, zdir='y', color=c, alpha=0.8,width=8)

ax.w_xaxis.set_major_locator(ticker.FixedLocator(some_dates)) # I want all the dates on my xaxis
ax.w_xaxis.set_major_formatter(ticker.FuncFormatter(format_date))
for tl in ax.w_xaxis.get_ticklabels(): # re-create what autofmt_xdate but with w_xaxis
       tl.set_ha('right')
       tl.set_rotation(30)     

ax.set_ylabel('Series')
ax.set_zlabel('Amount')

plt.show()


change the distance - ax.dist - like this:

ax.dist = 15
0

精彩评论

暂无评论...
验证码 换一张
取 消