Есть ли функция для создания матриц рассеяния в matplotlib?

Пример матрицы рассеянного экрана

введите описание изображения здесь

  • График разметки matplotlib с разными маркерами и цветами
  • matplotlib 3D-диаграмма рассеяния с цветом маркера, соответствующим значениям RGB
  • python matplotlib обновляет график рассеяния от функции
  • разброс графика в matplotlib
  • Получить данные из графика с помощью matplotlib
  • Есть ли такая функция в matplotlib.pyplot?

  • Если вы ищете быстрый способ найти многоугольник, то точка принадлежит Shapely
  • Как сделать штриховые графики автоматически переключаться между разными цветами?
  • разброс графика в matplotlib
  • Библиотека для рендеринга Directed Graphs (похожа на graphviz) на Google App Engine
  • Matplotlib: как построить категориальные данные по оси y?
  • matplotlib 3D-диаграмма рассеяния с цветом маркера, соответствующим значениям RGB
  • 5 Solutions collect form web for “Есть ли функция для создания матриц рассеяния в matplotlib?”

    Вообще говоря, matplotlib обычно не содержит функций построения, которые работают на более чем одном объекте осей (в данном случае – подзадача). Ожидается, что вы напишете простую функцию, чтобы объединить все вместе, но вы бы хотели.

    Я не совсем уверен, как выглядят ваши данные, но просто создать функцию, чтобы сделать это с нуля. Если вы всегда будете работать со структурированными или rec-массивами, вы можете упростить это прикосновение. (т. е. всегда есть имя, связанное с каждой серией данных, поэтому вы можете не указывать имена.)

    В качестве примера:

    import itertools import numpy as np import matplotlib.pyplot as plt def main(): np.random.seed(1977) numvars, numdata = 4, 10 data = 10 * np.random.random((numvars, numdata)) fig = scatterplot_matrix(data, ['mpg', 'disp', 'drat', 'wt'], linestyle='none', marker='o', color='black', mfc='none') fig.suptitle('Simple Scatterplot Matrix') plt.show() def scatterplot_matrix(data, names, **kwargs): """Plots a scatterplot matrix of subplots. Each row of "data" is plotted against other rows, resulting in a nrows by nrows grid of subplots with the diagonal subplots labeled with "names". Additional keyword arguments are passed on to matplotlib's "plot" command. Returns the matplotlib figure object containg the subplot grid.""" numvars, numdata = data.shape fig, axes = plt.subplots(nrows=numvars, ncols=numvars, figsize=(8,8)) fig.subplots_adjust(hspace=0.05, wspace=0.05) for ax in axes.flat: # Hide all ticks and labels ax.xaxis.set_visible(False) ax.yaxis.set_visible(False) # Set up ticks only on one side for the "edge" subplots... if ax.is_first_col(): ax.yaxis.set_ticks_position('left') if ax.is_last_col(): ax.yaxis.set_ticks_position('right') if ax.is_first_row(): ax.xaxis.set_ticks_position('top') if ax.is_last_row(): ax.xaxis.set_ticks_position('bottom') # Plot the data. for i, j in zip(*np.triu_indices_from(axes, k=1)): for x, y in [(i,j), (j,i)]: axes[x,y].plot(data[x], data[y], **kwargs) # Label the diagonal subplots... for i, label in enumerate(names): axes[i,i].annotate(label, (0.5, 0.5), xycoords='axes fraction', ha='center', va='center') # Turn on the proper x or y axes ticks. for i, j in zip(range(numvars), itertools.cycle((-1, 0))): axes[j,i].xaxis.set_visible(True) axes[i,j].yaxis.set_visible(True) return fig main() 

    введите описание изображения здесь

    Для тех, кто не хочет определять свои собственные функции, в Python имеется большой анализ данных, который называется Pandas , где можно найти метод scatter_matrix () :

     from pandas.tools.plotting import scatter_matrix df = DataFrame(randn(1000, 4), columns=['a', 'b', 'c', 'd']) scatter_matrix(df, alpha=0.2, figsize=(6, 6), diagonal='kde') 

    введите описание изображения здесь

    Спасибо, что поделились своим кодом! Вы поняли все тяжелые вещи для нас. Когда я работал с ним, я заметил несколько мелочей, которые выглядели не совсем правильно.

    1. [FIX # 1] Оси-тики не выстраивались так, как я ожидал (т. Е. В вашем примере выше вы должны иметь возможность нарисовать вертикальную и горизонтальную линию через любую точку на всех участках, и линии должны пересекаться через соответствующие point на других графиках, но поскольку он сидит, это не происходит.

    2. [FIX # 2] Если у вас есть нечетное число переменных, с которыми вы работаете, нижние правые угловые оси не вытягивают правильные xtics или ytics. Он просто оставляет его как по умолчанию 0..1 тиков.

    3. Не исправление, но я сделал необязательным для явного ввода names , так что он ставит по умолчанию xi для переменной i в диагональных положениях.

    Ниже вы найдете обновленную версию своего кода, в которой рассматриваются эти два момента, в противном случае сохраняя красоту вашего кода.

     import itertools import numpy as np import matplotlib.pyplot as plt def scatterplot_matrix(data, names=[], **kwargs): """ Plots a scatterplot matrix of subplots. Each row of "data" is plotted against other rows, resulting in a nrows by nrows grid of subplots with the diagonal subplots labeled with "names". Additional keyword arguments are passed on to matplotlib's "plot" command. Returns the matplotlib figure object containg the subplot grid. """ numvars, numdata = data.shape fig, axes = plt.subplots(nrows=numvars, ncols=numvars, figsize=(8,8)) fig.subplots_adjust(hspace=0.0, wspace=0.0) for ax in axes.flat: # Hide all ticks and labels ax.xaxis.set_visible(False) ax.yaxis.set_visible(False) # Set up ticks only on one side for the "edge" subplots... if ax.is_first_col(): ax.yaxis.set_ticks_position('left') if ax.is_last_col(): ax.yaxis.set_ticks_position('right') if ax.is_first_row(): ax.xaxis.set_ticks_position('top') if ax.is_last_row(): ax.xaxis.set_ticks_position('bottom') # Plot the data. for i, j in zip(*np.triu_indices_from(axes, k=1)): for x, y in [(i,j), (j,i)]: # FIX #1: this needed to be changed from ...(data[x], data[y],...) axes[x,y].plot(data[y], data[x], **kwargs) # Label the diagonal subplots... if not names: names = ['x'+str(i) for i in range(numvars)] for i, label in enumerate(names): axes[i,i].annotate(label, (0.5, 0.5), xycoords='axes fraction', ha='center', va='center') # Turn on the proper x or y axes ticks. for i, j in zip(range(numvars), itertools.cycle((-1, 0))): axes[j,i].xaxis.set_visible(True) axes[i,j].yaxis.set_visible(True) # FIX #2: if numvars is odd, the bottom right corner plot doesn't have the # correct axes limits, so we pull them from other axes if numvars%2: xlimits = axes[0,-1].get_xlim() ylimits = axes[-1,0].get_ylim() axes[-1,-1].set_xlim(xlimits) axes[-1,-1].set_ylim(ylimits) return fig if __name__=='__main__': np.random.seed(1977) numvars, numdata = 4, 10 data = 10 * np.random.random((numvars, numdata)) fig = scatterplot_matrix(data, ['mpg', 'disp', 'drat', 'wt'], linestyle='none', marker='o', color='black', mfc='none') fig.suptitle('Simple Scatterplot Matrix') plt.show() 

    Еще раз спасибо за то, что поделились этим с нами. Я использовал его много раз! О, и я переделал main() часть кода, чтобы он мог быть формальным примером кода или не вызываться, если он импортируется в другой фрагмент кода.

    Вы также можете использовать функцию pairplot для pairplot :

     import seaborn as sns sns.set() df = sns.load_dataset("iris") sns.pairplot(df, hue="species") 

    Читая вопрос, я ожидал увидеть ответ, включая rpy . Я думаю, что это хороший вариант, использующий два прекрасных языка. Итак, вот оно:

     import rpy import numpy as np def main(): np.random.seed(1977) numvars, numdata = 4, 10 data = 10 * np.random.random((numvars, numdata)) mpg = data[0,:] disp = data[1,:] drat = data[2,:] wt = data[3,:] rpy.set_default_mode(rpy.NO_CONVERSION) R_data = rpy.r.data_frame(mpg=mpg,disp=disp,drat=drat,wt=wt) # Figure saved as eps rpy.r.postscript('pairsPlot.eps') rpy.r.pairs(R_data, main="Simple Scatterplot Matrix Via RPy") rpy.r.dev_off() # Figure saved as png rpy.r.png('pairsPlot.png') rpy.r.pairs(R_data, main="Simple Scatterplot Matrix Via RPy") rpy.r.dev_off() rpy.set_default_mode(rpy.BASIC_CONVERSION) if __name__ == '__main__': main() 

    Я не могу опубликовать изображение, чтобы показать результат 🙁 извините!

    Python - лучший язык программирования в мире.