Как использовать строки в matplot? [Дубликат]

У меня была такая ситуация, когда одна из моих значений strings.xml имела какую-то динамическую часть. Я установил strings.xml с «заменяющим текстом» (что-то вроде %%REPLACEMENT_EMAIL%%), и когда я хотел использовать эту строку программно, я получил строковое значение ресурса и заменил экземпляры этого замещающего текста динамическим (например, ввод пользователем).

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

6
задан Chris 23 January 2012 в 14:33
поделиться

5 ответов

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

from matplotlib import pyplot as PLT

# make up some data for this example
t = range(8)
s = 7 * t + 5
# make up some data labels which we want to appear in place of the symbols
x = 8 * "dp".split()
y = map(str, range(8))
data_labels = [ i+j for i, j in zip(x, y)]
fig = PLT.figure()
ax1 = fig.add_subplot(111)
ax1.plot(t, s, "o", mfc="#FFFFFF")     # set the symbol color so they are invisible
for a, b, c in zip(t, s, data_labels) :
    ax1.text(a, b, c, color="green")

PLT.show()

Таким образом, это ставит «dp1», «dp2», ... вместо каждого из исходных символов данных - по сути, создавая пользовательские «текстовые символы», хотя снова я должен поверить, что есть более прямой способ сделать это в matplotlib (без использования исполнителей).

1
ответ дан doug 26 August 2018 в 09:33
поделиться

Я не мог найти удобный способ сделать это, поэтому я прибегнул к этой небольшой вспомогательной функции.

import matplotlib.pyplot as p
def plot_classes(x, y, plotfun=p.scatter, **kwargs):
    from itertools import count
    import numpy as np
    classes = sorted(set(x))
    class_dict = dict(zip(classes, count()))
    class_map = lambda x: class_dict[x]
    plotfun(map(class_map, x), y, **kwargs)
    p.xticks(np.arange(len(classes)), classes)

Затем вызов plot_classes(data["class"], data["y"], marker="+") должен работать как ожидалось.

0
ответ дан icks 26 August 2018 в 09:33
поделиться

Из matplotlib 2.1 вы можете использовать строки в функциях построения.

import matplotlib.pyplot as plt
x = ["Apple", "Banana", "Cherry"]
y = [5,2,3]

plt.plot(x, y)

plt.show()

Обратите внимание, что для сохранения порядка ввода строки на сюжете, вам нужно использовать matplotlib> = 2.2.

4
ответ дан ImportanceOfBeingErnest 26 August 2018 в 09:33
поделиться

Почему бы просто не сделать значение x некоторым автоматически увеличивающимся номером, а затем изменить метку?

- jed

3
ответ дан Jed Daniels 26 August 2018 в 09:33
поделиться

Вы должны попробовать xticks

import pylab

names = ['anne','barbara','cathy']
counts = [3230,2002,5456]

pylab.figure(1)
x = range(3)
pylab.xticks(x, names)
pylab.plot(x,counts,"g")

pylab.show()
9
ответ дан user664225 26 August 2018 в 09:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: