Какой тип диаграмм вы бы выбрали для этой проблемы, и какая библиотека диаграмм может предоставить его? - PullRequest
1 голос
/ 19 февраля 2010

Предположим, у меня есть N сегментов, каждый из которых имеет начальное и конечное значения, например:

[1,40],[40,80],[80,100],[90,110]

Я хотел бы создать диаграмму, в которой я могу отобразить все из них вТаким образом, я вижу, что четвертый сегмент перекрывает значения третьего.

Я новичок в графике, можете ли вы предложить, какой тип диаграммы я мог бы использовать для такого рода "проблемы"?Кроме того, если бы вы могли предложить библиотеку, которая поддерживает диаграммы такого типа, это было бы замечательно.Я могу использовать любой из: Java, Ruby, Python, Perl, .NET.Приложение, которое будет генерировать такие диаграммы, будет работать на компьютере под управлением Windows.

Спасибо!

Ответы [ 8 ]

3 голосов
/ 25 февраля 2010

Используйте Google Charts API , чтобы создать гистограмму с накоплением, например:

http://chart.apis.google.com/chart?
    cht=bhs&chs=400x150&chco=eeffee,009933&chbh=r,0.5,2.0&chds=0,120&
    chxt=x,y&chxr=0,0,120,20|1,1,5&chd=t:1,40,80,90|39,40,20,20
                                                          ^^

Сделайте первый ряд белым, чтобы он не показывался. (Я использовал светло-зеленый, чтобы показать, как это работает; измените eeffee на ffffff в приведенном выше URL, чтобы сделать его белым.)

Обратите внимание, что вам нужно будет рассчитать ширину ваших фактических данных, например, для записи [80,100] вам нужно будет использовать 20 в качестве ширины, как выделено в приведенном выше URL.

Bar chart for example data

3 голосов
/ 24 февраля 2010

Вы можете реализовать что-то вроде ответа Синьхуа в python, используя matplotlib , например:

import matplotlib.pyplot as plt
from pylab import zeros

data = [[1,40],[40,80],[80,100],[90,110]]
N = len(data)
plt.figure()
start_points = [x[0] for x in data]
lengths = [x[1]-x[0] for x in data]
z = zeros(N)
plt.errorbar(x=start_points, y=range(N), xerr=[z,lengths], fmt='o', xuplims=True)
plt.grid(True)
plt.axis(ymax=N-.5)

Что даст тебе image of results using matplotlib

3 голосов
/ 22 февраля 2010

ИМХО, я бы предложил вам использовать простую гистограмму, используя великолепный Google Bar Charts API .Например, для данных, указанных в вашем вопросе, я бы сделал URL-адрес, подобный этому

http://chart.apis.google.com/chart?cht=bvg&chs=320x280
&chco=4D89F9,C6D9FD&chbh=r,0.5,3.0
&chds=0,130&chxt=x,y&chxr=1,0,130,0&chxl=0:|a|b|c|d|
&chd=t:1,40,80,90|40,80,100,110

... и Google вернул бы мне такую ​​диаграмму.1009 *

Как видите, это простой запрос GET.И теперь они поддерживают POST-запросы .

На самом деле, я рекомендую вам сделать простой поиск в Google Chart Gallery .Даже если вы не собираетесь его использовать, по крайней мере, у вас будут действительно хорошие примеры для вашего проекта.

(Очевидным недостатком этого подхода является необходимость подключения к Интернету. НоРекомендация гистограммы по-прежнему полезна.)

2 голосов
/ 19 февраля 2010

Я могу думать о типе диаграммы, как показано ниже. Может быть, это сроки. (Или диаграмма Ганта)

|  #######
|         ########
|                 ########
|                       #########
------------------------------------
   1     40      80    90  100  110

(Извините, я немного ошеломлен). Вероятно, кто-то еще придумает график API. : D

1 голос
/ 24 февраля 2010

Возможно, больше лака, который вы хотите, следующее будет делать в основном то, что вам нужно:

В вашем примере я бы просто использовал каждую пару чисел в качестве времени начала и окончания каждого элемента. Ничего страшного, если они просто числа ... см. Пример monet ... он использует некоторые времена начала / окончания события как простые числа (например, 1845 и 1846).

Использование этого для отслеживания продолжительности «событий» или проверки билетов может быть очень полезно для наблюдения за происходящим.

0 голосов
/ 25 февраля 2010

Если вы будете работать с .net, вы можете попробовать Infragistics control.Если вы используете WPF или Silverlight и хотите что-то бесплатно, вы можете попробовать WPF Toolkit или Visifire .

0 голосов
/ 24 февраля 2010

http://pchart.sourceforge.net/ PChart для PHP - это действительно хорошая библиотека диаграмм, у них также есть информативный учебник

0 голосов
/ 19 февраля 2010

Здесь можно использовать столбчатую диаграмму, которая поддерживает начальное значение, например amCharts , или свечную диаграмму с открытым / максимальным значением, равным первому значению, и близким / низким значением второго.

...