Вопрос

Мне нужно отобразить некоторые данные в различных формах.В настоящее время я использую Матплотлиб и я вполне доволен сюжетами, которые могу создать.

Этот вопрос о том, как построить последний.Данные аналогичны «таблице расстояний», например этот (только больше, моя таблица имеет размер 128x128 и по-прежнему содержит 3 или более чисел на элемент).

Теперь мои данные гораздо лучше «структурированы», чем таблица расстояний (мои данные не изменяются «случайно», как в таблице расстояний, отсортированной в алфавитном порядке), поэтому гистограмма, или, может быть, 3 из них было бы идеально.Насколько я понимаю, такая диаграмма отсутствует в Matplotlib.

Я мог бы использовать (цветной) Countor3d, например эти или что-то в 2D, например imshow, но это не очень хорошо отражает то, что представляют собой данные (данные имеют значение только в моих 128 точках, между двумя точками нет ничего).И высота полос более читабельна, чем цвет, ИМХО.

Таким образом вопросы:

  1. можно ли создать трехмерную диаграмму в Matplotlib?Должно быть ясно, что я имею в виду 2D-домен, а не просто 2D-диаграмму с «фальшивым» 3D-рендерингом в эстетических целях.
  2. если ответ на предыдущий вопрос отрицательный, то есть ли какая-нибудь другая библиотека, способная это сделать?Я предпочитаю что-нибудь на основе Python, но меня устраивают и другие возможности, совместимые с Linux.
  3. если ответ на предыдущий вопрос отрицательный, есть ли у вас предложения, как показать эти данные?Например.создать таблицу со значениями, наложенными на 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()      

http://i8.tietuku.com/ea79b55837914ab2.png

Вы можете проверить Chart Director:

http://www.advsofteng.com

Он имеет довольно широкий набор диаграмм и графиков, а также имеет хороший API Python (и некоторых других языков).

Есть два издания:Бесплатная версия ставит рекламу на сгенерированном изображении, а версия оплаты довольно по разумной цене.

Вот одна из наиболее интересных трехмерных гистограмм:

sample graph
(источник: advsofteng.com)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top