Как сделать 3D-эффект на барах в Matplotlib? - PullRequest
4 голосов
/ 17 августа 2010

У меня очень простая базовая графика, подобная этой alt text

но я хочу отобразить бары с некоторым 3D-эффектом, как это alt text

Я просто хочу, чтобы у баров был этот эффект 3d ... мой код:

fig = Figure(figsize=(4.6,4))
ax1 = fig.add_subplot(111,ylabel="Valeur",xlabel="Code",autoscale_on=True)

width = 0.35
ind = np.arange(len(values))
rects = ax1.bar(ind, values, width, color='#A1B214')
ax1.set_xticks(ind+width)
ax1.set_xticklabels( codes )
ax1.set_ybound(-1,values[0] * 1.1)
canvas = FigureCanvas(fig)
response = HttpResponse(content_type='image/png')
canvas.print_png(response)

Я искал в галерее matplotlib, пробовал несколько вещей, но мне не повезло, есть идеи? Thxs

Ответы [ 3 ]

11 голосов
/ 18 августа 2010

Я, конечно, понимаю вашу причину, по которой вам нужен 3D-бар.Я подозреваю, что именно поэтому они были созданы.

Библиотеки («наборы инструментов») в Matplotlib, необходимые для создания 3D-графиков, , а не сторонние библиотеки и т. Д., Скорее они включены в базовую установку Matplotlib .(Это верно для текущей стабильной версии, которая является 1.0, хотя я не верю, что это было для 0.98, поэтому изменение - от «надстройки» до части базовой установки - произошло в течение прошлого года,я верю)

Итак, вот вы:

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as PLT
import numpy as NP

fig = PLT.figure()
ax1 = fig.add_subplot(111, projection='3d')

xpos = NP.random.randint(1, 10, 10)
ypos = NP.random.randint(1, 10, 10)
num_elements = 10
zpos = NP.zeros(num_elements)
dx = NP.ones(10)
dy = NP.ones(10)
dz = NP.random.randint(1, 5, 10)

ax1.bar3d(xpos, ypos, zpos, dx, dy, dz, color='#8E4585')
PLT.show()

Чтобы создать 3d бары в Maplotlib, вам просто нужно сделать три (дополнительные) вещи:

  1. import Axes3D из mpl_toolkits.mplot3d

  2. , вызов метода bar3d (в моем скриптлете он вызывается ax1 экземпляром класса Axes).Подпись метода:

    bar3d (x, y, z, dy, dz, color = 'b', zsort = "средний", * args, ** kwargs)

  3. передать дополнительный аргумент add_subplot, projection = '3d'

alt text

2 голосов
/ 17 августа 2010

Возможно, вы сможете что-то решить с mplot3d.

1 голос
/ 17 августа 2010

Насколько я знаю, Matplotlib не по своему дизайну поддерживает такие функции, как эффект "3D", который вы только что упомянули. Я помню, как читал об этом некоторое время назад. Я не знаю, как это изменилось за это время .

См. ветку обсуждения для получения более подробной информации.

Обновление

Взгляните на модуль mplot3d Джона Портера. Это не часть стандартного matplotlib, а собственное расширение. Никогда не использовал его сам, поэтому не могу много сказать о его полезности.

...