Построение нескольких линий с помощью цветовой карты в pgfplots

Построение нескольких линий с помощью цветовой карты в pgfplots

У меня аналогичный вопрос к Стиву Хэтчеру из этой ветки: Цветовая карта спектра для нескольких кривых

У меня есть файл данных (mwe_data.txt), который содержит несколько столбцов. Первый столбец — ось x, все остальные столбцы — y1, y2, y3, ... yn.

# mwe_data.txt:
# x y1  y2  y3  y4  y5  y6
0.0 -1.6    0.5 1.5 5.8 8.7 12
0.10    10.5    9.3000001907    10.1000003815   15.1999998093   19.7000007629   19.2000007629
0.20    17.7999992371   14.3000001907   13.3999996185   16.5    20.7000007629   20.2000007629
0.40    28.6000003815   26.2999992371   23.7000007629   23.2999992371   21  24
0.60    33.0999984741   29.3999996185   26.2999992371   25.3999996185   22  25
0.70    36.9000015259   32.2999992371   28.1000003815   25.6000003815   26.1000003815   27

Я хочу построить все столбцы y относительно столбца x. Я хочу, чтобы мои данные были представлены точками, и я хочу, чтобы цвет для конкретного столбца выбирался из спектральной цветовой карты. И я хочу использовать pgfplots.

Ниже представлен мой скрипт на Python, который генерирует нужный мне график:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cmplt

plt.ion()

mydata = np.loadtxt('mwe_data.txt', dtype=float)
mylegend = ["Jan 1", "Feb 1", "Mar 1", "Apr 1", "May 1", "Jun 1"]

plt.rc('text', usetex=True)

plt.figure()
plt.xlim(-0.05, 0.75)

maxcols = np.shape(mydata)[1]
cmdiv = float(maxcols)

for ii in range(1, maxcols):
    xaxis = mydata[:, 0]
    yaxis = mydata[:, ii]
    plt.plot(xaxis, yaxis, "o", label=mylegend[ii-1],
             c=cmplt.spectral(ii/cmdiv, 1))

plt.legend(loc='lower right', frameon=False)

Результат следующий:Python: идеальный граф

В LaTeX мне удалось продвинуться до сих пор:

\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{
  compat = 1.9,
  every axis legend/.append style={draw=none, font=\footnotesize, legend cell align = left, at={(0.95, 0.05)}, anchor=south east}}

\begin{document} 
\begin{tikzpicture}
\begin{axis}[
colormap/jet]
\def\maxcols{6}
\foreach \i in {1, 2, ..., \maxcols}
\addplot+[mark=*, only marks] table[x index=0, y index=\i] {mwe_data.txt};
\legend{Jan 1, Feb 1, Mar 1, Apr 1, May 1, Jun 1}
\end{axis}
\end{tikzpicture}

\end{document}

Результат:График, латекс 1, первая попытка

Здесь я не знаю, как изменить цвета линий/точек на спектральные. Я попробовал использовать решение, предложенное в теме, которую я упомянул в начале, и получил следующее (здесь мне пришлось изменить данные, чтобы получить z-координату, соответствующую цвету из спектра):

# mwe_data_3d.txt:
# x y   z (colour)
0.0 -1.6    0
0.10    10.6    0
0.20    17.7999992371   0
0.40    28.6000003815   0
0.60    33.0999984741   0
0.70    36.9000015259   0

0.0 0.6 0.2
0.10    9.3 0.2
[...]

0.0 12  1
0.10    19.2    1
0.20    20.2    1
0.40    24  1
0.60    25  1
0.70    27  1

И код LaTeX:

\documentclas{standalone}
\usepackage{pgfplots}
\pgfplotsset{
  compat = 1.9,
  every axis legend/.append style={draw=none, font=\footnotesize, legend cell align = left, at={(0.95, 0.05)}, anchor=south east},}

\begin{document} 

\begin{tikzpicture}
    \begin{axis}[
        view={0}{90},
        colormap/jet,
    ]
    \addplot3[
        only marks,
        mark=*,
        mesh,
        patch type=line,
        point meta=z,
    ]
    table {mwe_data_3d.txt};
    \legend{Jan 1, Feb 1, Mar 1, Apr 1, May 1, Jun 1}

    \end{axis}
\end{tikzpicture}
\end{document}

Результат: График, латекс 2, вторая попытка

Последнее решение дает мне нужный цвет, но есть и другие проблемы:

  1. легенда явно неверна
  2. все метки черные, хотя я хочу, чтобы они были того же цвета, что и линии
  3. Я хочу иметь возможность использовать опцию «только оценки».

Какие-либо предложения?

решение1

Вы можете использовать подход изПостроение графика одной оси x против нескольких осей y с использованием пользовательской цветовой карты:

\documentclass[border=5mm]{standalone}

\usepackage{pgfplots}

\begin{filecontents}{mwe_data.txt}
x y1  y2  y3  y4  y5  y6
0.0 -1.6    0.5 1.5 5.8 8.7 12
0.10    10.5    9.3000001907    10.1000003815   15.1999998093   19.7000007629   19.2000007629
0.20    17.7999992371   14.3000001907   13.3999996185   16.5    20.7000007629   20.2000007629
0.40    28.6000003815   26.2999992371   23.7000007629   23.2999992371   21  24
0.60    33.0999984741   29.3999996185   26.2999992371   25.3999996185   22  25
0.70    36.9000015259   32.2999992371   28.1000003815   25.6000003815   26.1000003815   27
\end{filecontents}


\begin{document}

\begin{tikzpicture}
\begin{axis}[colormap/jet]
\foreach \i in {1,...,6}{
\addplot [scatter, only marks, point meta=\i] table [y index=\i] {mwe_data.txt};
}
\end{axis}
\end{tikzpicture}
\end{document}

Связанный контент