#python #matplotlib
#python #matplotlib
Вопрос:
Я новичок в использовании matplotlib, поэтому у меня возникли некоторые проблемы. Я должен создать гистограмму с разными метками для каждого веб-сайта, который у меня есть. Файл выглядит следующим образом:
1001 adblock 12
1001 badger 11
1001 disconnect 15
1001 ghostery 15
1001 nottrack 14
1001 origin 15
1001 policy 16
1001 ultimate 14
4ruote adblock 12
4ruote badger 1
4ruote disconnect 14
4ruote ghostery 27
4ruote nottrack 9
4ruote origin 26
4ruote policy 34
4ruote ultimate 20
...... ........ ...
Моя цель — создать столбчатую диаграмму, в которой у меня есть:
-
на узлах оси x (первый столбец файла) находится строка
-
на оси y значения (третий столбец файла) для этого сайта (которые 8 раз повторяются внутри файла), так что 8 целых значений
-
метки, которые для определенного сайта присутствуют во втором столбце (строки).
Я читал разные ответы, но каждый из них не угрожал этому сравнению между метками для одной и той же переменной. То, что я делаю, это считываю файл, разделяю строку и беру первый и третий столбцы, но как я могу управлять метками?
Ответ №1:
seaborn
это аккуратно:
from pandas import read_csv
from matplotlib.pyplot import show
from seaborn import factorplot
fil = read_csv('multi_bar.txt', sep=r's*', engine='python', header=None)
fil.columns=['site','type','value']
factorplot(data=fil, x='site', y='value', hue='type', kind='bar')
show()
Комментарии:
1. О, очень хорошо!! это именно то, что я хотел получить, но я хочу спросить вас только об одном: в первой части (веб-сайт 1001), почему последний штрих не был нанесен для adblock, даже если у меня есть в файле:
2. 1001 adblock 12, который должен отображать верхнюю полосу 12!!
3. Хороший улов!
read_csv
предполагается, что первая строка является строкой заголовка, а не данными. Исправлено.
Ответ №2:
Давайте предположим, что вы прочитали веб-сайты в 8 разных наборах данных (adblock, badger, disconnect и т. Д.). Затем вы можете использовать приведенную ниже логику для построения каждого ряда и отображения их меток в легенде.
import numpy
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
#this is your number of datasets
x = numpy.arange(8)
width = 0.1
#plot each dataset here, offset by the width of the preceding bars
b1 = ax.bar(x, adblock, width, color='r')
b2 = ax.bar(x width, badger, color='g')
b3 = ax.bar(x width*2, disconnect, color='m')
legend([b1[0], b2[0], b3[0]], ['adblock', 'badger',
'disconnect'])
plt.show()
Комментарии:
1. Итак, могу ли я построить для конкретного веб-сайта сравнение между различными наборами данных? Потому что я пытаюсь прочитать файл строка за строкой и. Есть ли другой простой способ сделать это?
2. Я смущен вашим вопросом — этот подход даст график, аналогичный показанному здесь: matplotlib.org/examples/api/barchart_demo.html . Где мужчины, женщины и т. Д. Будут Вашими сайтами.
3. Я имею в виду: каким образом я могу собирать данные в наборах данных? потому что я новичок в python и знаю, что это возможно со словарем (поэтому для каждого сайта и плагина -> plot …). Но мой вопрос: есть ли простой способ создать этот набор данных, непосредственно работающий с полученным файлом выше?
4. В любом случае, я видел этот график, и это именно то, что я хочу получить. Но в этом примере данные были переданы вручную, а не взяты в файл.. итак, у меня проблемы..
5. Еще лучше то, что я хочу получить, это список веб-сайтов по оси X, значения по Y и в качестве меток (для каждого сайта) разные плагины. So все же отличается от решения, предложенного вами.