Matplotlib пунктирный стиль одной строки, а не другие [дублировать]

Использовать парсер JSON, например JSON.parse:

function IsJsonString(str) {
    try {
        JSON.parse(str);
    } catch (e) {
        return false;
    }
    return true;
}
19
задан khagler 6 January 2013 в 04:30
поделиться

3 ответа

Вы так близки!

Вы можете указать цвета в списке стилей:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

testdataframe = pd.DataFrame(np.arange(12).reshape(4,3), columns=['A', 'B', 'C'])
styles = ['bs-','ro-','y^-']
linewidths = [2, 1, 4]
fig, ax = plt.subplots()
for col, style, lw in zip(testdataframe.columns, styles, linewidths):
    testdataframe[col].plot(style=style, lw=lw, ax=ax)

Также обратите внимание, что метод plot может принимать matplotlib.axes объект, поэтому вы можете сделать несколько вызовов, подобных этому (если хотите):

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

testdataframe1 = pd.DataFrame(np.arange(12).reshape(4,3), columns=['A', 'B', 'C'])
testdataframe2 = pd.DataFrame(np.random.normal(size=(4,3)), columns=['D', 'E', 'F'])
styles1 = ['bs-','ro-','y^-']
styles2 = ['rs-','go-','b^-']
fig, ax = plt.subplots()
testdataframe1.plot(style=styles1, ax=ax)
testdataframe2.plot(style=styles2, ax=ax)

В этом случае не очень практично, но концепция может пригодиться позже.

32
ответ дан Paul H 20 August 2018 в 11:07
поделиться
  • 1
    thx для вашей помощи, но это не помогает в ширине линии? также я хочу использовать некоторый самоопределенный цвет, например own_color = '# FF0000', и тогда он не может быть вызван таким образом. – Joerg 6 January 2013 в 18:40
  • 2
    то я могу думать только об итерации по столбцам. см. мои изменения в первом примере. – Paul H 6 January 2013 в 23:37
  • 3
    Да, это то, что я сейчас использую. Но я просто задаюсь вопросом, является ли это всего лишь этим неуклюжим способом для такой прямой задачи. Но большое спасибо за вашу помощь !! – Joerg 7 January 2013 в 09:50
  • 4
    Это хороший ответ, но, по мнению Дж. Йорга, нет ли потокового способа сделать это с помощью пары строк кода? Это, казалось бы, легкая задача. – zthomas.nc 15 March 2017 в 18:39
  • 5
    @ zthomas.nc вы, вероятно, захотите использовать морские лодки, если вы так много делаете – Paul H 18 March 2017 в 00:25

Рассмотрение фрейма данных testdataframe

testdataframe = pd.DataFrame(np.arange(12).reshape(4,3))

print(testdataframe)

   0   1   2
0  0   1   2
1  3   4   5
2  6   7   8
3  9  10  11

Вы можете объединить styles в один список строк, как в styles, определенный ниже. Я также определю ширины линий в lws

styles=['bs-', 'ro-', 'y^-']
lws = [2, 1, 1]

. Мы можем использовать метод plot в testdataframe, передавая список styles параметру style. Обратите внимание, что мы могли бы также передавать словарь (и, возможно, другие вещи).

Однако ширина строк не так легко обрабатывается. Сначала я захватил объект AxesSubplot и перебирал атрибут линий, устанавливающий ширину линии.

ax = testdataframe.plot(style=styles)
for i, l in enumerate(ax.lines):
    plt.setp(l, linewidth=lws[i])

9
ответ дан piRSquared 20 August 2018 в 11:07
поделиться

Итак, я думаю, что ответ заключается в передаче цвета и стиля в одном и том же аргументе. Следующий пример работает с pandas 0.19.2:

testdataframe=pd.DataFrame(np.arange(12).reshape(4,3))
testdataframe.plot(style=['r*-','bo-','y^-'], linewidth=2.0)

К сожалению, кажется, что передача нескольких строк в качестве входа в matplotlib невозможна.

6
ответ дан RexFuzzle 20 August 2018 в 11:07
поделиться
Другие вопросы по тегам:

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