Гистограмма (о графике) 3D на Python
-
20-08-2019 - |
Вопрос
Мне нужно отобразить некоторые данные в различных формах.В настоящее время я использую Матплотлиб и я вполне доволен сюжетами, которые могу создать.
Этот вопрос о том, как построить последний.Данные аналогичны «таблице расстояний», например этот (только больше, моя таблица имеет размер 128x128 и по-прежнему содержит 3 или более чисел на элемент).
Теперь мои данные гораздо лучше «структурированы», чем таблица расстояний (мои данные не изменяются «случайно», как в таблице расстояний, отсортированной в алфавитном порядке), поэтому гистограмма, или, может быть, 3 из них было бы идеально.Насколько я понимаю, такая диаграмма отсутствует в Matplotlib.
Я мог бы использовать (цветной) Countor3d, например эти или что-то в 2D, например imshow, но это не очень хорошо отражает то, что представляют собой данные (данные имеют значение только в моих 128 точках, между двумя точками нет ничего).И высота полос более читабельна, чем цвет, ИМХО.
Таким образом вопросы:
- можно ли создать трехмерную диаграмму в Matplotlib?Должно быть ясно, что я имею в виду 2D-домен, а не просто 2D-диаграмму с «фальшивым» 3D-рендерингом в эстетических целях.
- если ответ на предыдущий вопрос отрицательный, то есть ли какая-нибудь другая библиотека, способная это сделать?Я предпочитаю что-нибудь на основе Python, но меня устраивают и другие возможности, совместимые с Linux.
- если ответ на предыдущий вопрос отрицательный, есть ли у вас предложения, как показать эти данные?Например.создать таблицу со значениями, наложенными на imshow или другим цветным способом?
Решение
МьяваВи2 могу сделать 3D-диаграммы (пролистните немного вниз).Как только у вас есть МайяВи/ВТК/ETS/и т. д.установил, все работает прекрасно, но установка всего этого может потребовать некоторой работы.В Ubuntu все это упаковано, но это единственный известный мне дистрибутив Linux, который это делает.
Другие советы
В течение некоторого времени в matplotlib не было поддержки 3D, но ее снова добавили. недавно.Вам нужно будет использовать версию svn, поскольку с тех пор не было выпущено ни одного релиза, а документация немного скудна (см. example/mplot3d/demo.py).Я не знаю, поддерживает ли mplot3d настоящие трехмерные гистограммы, но одна из демонстраций выглядит так, будто ее можно расширить до чего-то подобного.
Редактировать:Исходный код демо-версии находится в примеры но почему-то результата нет.Я имею в виду test_polys
функция, и вот как это выглядит:
пример рисунка http://www.iki.fi/jks/tmp/poly3d.png
А test_bar2D
Функция была бы еще лучше, но в демо-версии она закомментирована, поскольку вызывает ошибку в текущей версии svn.Возможно, это какая-то банальная проблема или что-то, что сложнее исправить.
Еще одна возможность — Gnuplot, который может нарисовать что-то вроде псевдотрехмерные гистограммы, и gnuplot.py позволяет взаимодействовать с Gnuplot из Python.Хотя сам я этого не пробовал.
Это мой код для простого Bar-3d с использованием matplotlib.
import mpl_toolkits
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
%matplotlib inline
## The value you want to plot
zval=[0.020752244,0.078514652,0.170302899,0.29543857,0.45358061,0.021255922,0.079022499,\
0.171294169,0.29749654,0.457114286,0.020009631,0.073154019,0.158043498,0.273889264,0.419618287]
fig = plt.figure(figsize=(12,9))
ax = fig.add_subplot(111,projection='3d')
col=["#ccebc5","#b3cde3","#fbb4ae"]*5
xpos=[1,2,3]*5
ypos=range(1,6,1)*5
zpos=[0]*15
dx=[0.4]*15
dy=[0.5]*15
dz=zval
for i in range(0,15,1):
ax.bar3d(ypos[i], xpos[i], zpos[i], dx[i], dy[i], dz[i],
color=col[i],alpha=0.75)
ax.view_init(azim=120)
plt.show()
Вы можете проверить Chart Director:
Он имеет довольно широкий набор диаграмм и графиков, а также имеет хороший API Python (и некоторых других языков).
Есть два издания:Бесплатная версия ставит рекламу на сгенерированном изображении, а версия оплаты довольно по разумной цене.
Вот одна из наиболее интересных трехмерных гистограмм:
(источник: advsofteng.com)