Вопрос по python – пользовательский сюжет matplotlib: шахматная доска, как стол с цветными клетками

11

Я начинаю рендерить графики с помощью matplotlib, изучая как python, так и эту интересную библиотеку графиков. Мне нужна помощь с пользовательским сюжетом для проблемы, над которой я работаю. Может быть, для этого уже есть встроенная функция.

Проблема: Я пытаюсь нарисовать таблицу (прямоугольник) в виде графика с 96 отдельными ячейками (8 строк по 12 столбцов). Цвет каждой альтернативной ячейки определенным цветом (например, шахматная доска: вместо черного / белого я буду использовать какую-то другую комбинацию цветов) и вставьте значение для каждой ячейки из фрейма данных pandas или словаря питона. Покажите метки col и row на стороне.

Пример данных:http://pastebin.com/N4A7gWuH

Мне бы хотелось, чтобы график выглядел примерно так, заменив значения в ячейках на numpy / pandas ds.

Образец участка:http://picpaste.com/sample-E0DZaoXk.png

Ценю ваш вклад.

PS: сделал то же самое в списке рассылки mathplotlib

Ах! Образец изображения проясняет ситуацию. Вам нужна таблица текстовых значений, подобная Excel, а не масштабированное изображение. Извините, я был смущен. В ретроспективе то, что вы хотели, кажется ясным, я просто неправильно понял вопрос. Joe Kington
Джо. Если я вас правильно понимаю, то думаю, что это то, чего я хочу. Просто перефразирую, чтобы убедиться, что мы находимся на одной странице. Постройте матрицу / таблицу (n x m) и раскрасьте каждую альтернативную ячейку, как показано в листе Excel. Этот цвет является постоянным и не изменяется в зависимости от числового значения ячейки. Abhi
Я не совсем понимаю, о чем вы спрашиваете. Хотите иметь & quot; полный & quot; сетка данных и хотите установить «шахматную доску» шаблон значений в сетке данных другого цвета, или вы хотите "перемежаться" ваши данные с помощью «шахматной доски»; образец значений, изображенных как некоторый постоянный цвет? Joe Kington

Ваш Ответ

1   ответ
31

imshow или жеmatshow.

Однако я не совсем понимаю, что вы имеете в виду.

Если вы хотите шахматную доску с каждым "белым" ячейка, окрашенная другим вектором, вы можете сделать что-то вроде этого:

import matplotlib.pyplot as plt
import numpy as np

# Make a 9x9 grid...
nrows, ncols = 9,9
image = np.zeros(nrows*ncols)

# Set every other cell to a random number (this would be your data)
image[::2] = np.random.random(nrows*ncols //2 + 1)

# Reshape things into a 9x9 grid.
image = image.reshape((nrows, ncols))

row_labels = range(nrows)
col_labels = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I']
plt.matshow(image)
plt.xticks(range(ncols), col_labels)
plt.yticks(range(nrows), row_labels)
plt.show()

enter image description here

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

Например.:

for i, (image_row, data_row) in enumerate(zip(image, data)):
    image_row[i%2::2] = data_row

Однако количество «данных» Ячейки в каждом ряду будут разными, и именно здесь меня смущает определение вашей проблемы.

By definition, a checkerboard pattern has a different number of "white" cells in each row.
Ваши данные предположительно (?) Имеют одинаковое количество значений в каждой строке. Вы должны определить, что вы хотите сделать. Вы можете либо усечь данные, либо добавить дополнительный столбец.

Изменить: я только что понял, что это верно только для нечетной длины столбцов.

Несмотря на это, я все еще смущен вашим вопросом.

Хотите иметь & quot; полный & quot; сетка данных и хотите установить «шахматную доску» структура ценностейin the data grid другим цветом, или вы хотите "перемежаться" ваши данные с помощью «шахматной доски»; образец значений, изображенных как некоторый постоянный цвет?

Update

Похоже, вы хотите что-то более похожее на таблицу? Matplotlib не идеален для этого, но вы можете сделать это.

В идеале вы просто используетеplt.table, но в этом случае его проще использоватьmatplotlib.table.Table непосредственно:

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

from matplotlib.table import Table

def main():
    data = pandas.DataFrame(np.random.random((12,8)), 
                columns=['A','B','C','D','E','F','G','H'])
    checkerboard_table(data)
    plt.show()

def checkerboard_table(data, fmt='{:.2f}', bkg_colors=['yellow', 'white']):
    fig, ax = plt.subplots()
    ax.set_axis_off()
    tb = Table(ax, bbox=[0,0,1,1])

    nrows, ncols = data.shape
    width, height = 1.0 / ncols, 1.0 / nrows

    # Add cells
    for (i,j), val in np.ndenumerate(data):
        # Index either the first or second item of bkg_colors based on
        # a checker board pattern
        idx = [j % 2, (j + 1) % 2][i % 2]
        color = bkg_colors[idx]

        tb.add_cell(i, j, width, height, text=fmt.format(val), 
                    loc='center', facecolor=color)

    # Row Labels...
    for i, label in enumerate(data.index):
        tb.add_cell(i, -1, width, height, text=label, loc='right', 
                    edgecolor='none', facecolor='none')
    # Column Labels...
    for j, label in enumerate(data.columns):
        tb.add_cell(-1, j, width, height/2, text=label, loc='center', 
                           edgecolor='none', facecolor='none')
    ax.add_table(tb)
    return fig

if __name__ == '__main__':
    main()

enter image description here

Error: User Rate Limit ExceededunutbuError: User Rate Limit Exceededstackoverflow.com/questions/15736051/…
Error: User Rate Limit Exceeded Abhi
Error: User Rate Limit Exceededpicpaste.com/sample-E0DZaoXk.pngError: User Rate Limit Exceeded Abhi

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