Как создать график тепла для большого массива? [Дубликат]

Сгенерировать строку запроса в PreparedStatement, чтобы число соответствовало количеству элементов в вашем списке. Вот пример:

public void myQuery(List<String> items, int other) {
  ...
  String q4in = generateQsForIn(items.size());
  String sql = "select * from stuff where foo in ( " + q4in + " ) and bar = ?";
  PreparedStatement ps = connection.prepareStatement(sql);
  int i = 1;
  for (String item : items) {
    ps.setString(i++, item);
  }
  ps.setInt(i++, other);
  ResultSet rs = ps.executeQuery();
  ...
}

private String generateQsForIn(int numQs) {
    String items = "";
    for (int i = 0; i < numQs; i++) {
        if (i != 0) items += ", ";
        items += "?";
    }
    return items;
}
49
задан Karnivaurus 22 October 2015 в 13:37
поделиться

3 ответа

Функция imshow() с параметрами interpolation='nearest' и cmap='hot' должна делать то, что вы хотите.

import matplotlib.pyplot as plt
import numpy as np

a = np.random.random((16, 16))
plt.imshow(a, cmap='hot', interpolation='nearest')
plt.show()

96
ответ дан Coquelicot 16 August 2018 в 03:51
поделиться
  • 1
    Я не думаю, что нужно указать интерполяцию. – miguel.martin 28 March 2017 в 06:12
  • 2
    @ miguel.martin в соответствии с документом pyplot: & quot; If интерполяция - это None (значение по умолчанию), по умолчанию - rc image.interpolation & quot ;. Поэтому я считаю необходимым включить его. – P. Camilleri 28 March 2017 в 07:11

Ответ здесь довольно поздний, но в любом случае ... Seaborn заботится о большой ручной работе и автоматически печатает градиент сбоку на диаграмме и т. д.

например,

import numpy as np
import seaborn as sns
import matplotlib.pylab as plt

uniform_data = np.random.rand(10, 12)
ax = sns.heatmap(uniform_data, linewidth=0.5)
plt.show()

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

corr = np.corrcoef(np.random.randn(10, 200))
mask = np.zeros_like(corr)
mask[np.triu_indices_from(mask)] = True
with sns.axes_style("white"):
    ax = sns.heatmap(corr, mask=mask, vmax=.3, square=True,  cmap="YlGnBu")
    plt.show()

Надеюсь, что это поможет!

9
ответ дан killerT2333 16 August 2018 в 03:51
поделиться
  • 1
    Я очень люблю тип сюжета, и половина матрицы полезна. Два вопроса: 1) на первом участке маленькие квадраты разделены белыми линиями, могут ли они быть суставными? 2) ширина белой линии, по-видимому, меняется, является ли это артефактом? – P. Camilleri 28 April 2018 в 22:23
  • 2
    Вы можете использовать аргумент «linewidth», который я использовал в первом графике для любого другого сюжета (например, на втором рисунке), чтобы получить разнесенные квадраты. Ширины линий только кажутся меняющимися в первом сюжете из-за проблем с экрана, они фактически не изменяются в действительности, они должны оставаться на постоянной, которую вы их установили. – killerT2333 29 April 2018 в 00:44

Вот как это сделать из csv:

import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import griddata

# Load data from CSV
dat = np.genfromtxt('dat.xyz', delimiter=' ',skip_header=0)
X_dat = dat[:,0]
Y_dat = dat[:,1]
Z_dat = dat[:,2]

# Convert from pandas dataframes to numpy arrays
X, Y, Z, = np.array([]), np.array([]), np.array([])
for i in range(len(X_dat)):
        X = np.append(X,X_dat[i])
        Y = np.append(Y,Y_dat[i])
        Z = np.append(Z,Z_dat[i])

# create x-y points to be used in heatmap
xi = np.linspace(X.min(),X.max(),1000)
yi = np.linspace(Y.min(),Y.max(),1000)

# Z is a matrix of x-y values
zi = griddata((X, Y), Z, (xi[None,:], yi[:,None]), method='cubic')

# I control the range of my colorbar by removing data 
# outside of my range of interest
zmin = 3
zmax = 12
zi[(zi<zmin) | (zi>zmax)] = None

# Create the contour plot
CS = plt.contourf(xi, yi, zi, 15, cmap=plt.cm.rainbow,
                  vmax=zmax, vmin=zmin)
plt.colorbar()  
plt.show()

, где dat.xyz находится в форме

x1 y1 z1
x2 y2 z2
...
8
ответ дан kilojoules 16 August 2018 в 03:51
поделиться
  • 1
    У вас наверняка не будет много строк комментариев в вашем скрипте;) – tommy.carstensen 4 November 2016 в 07:41
  • 2
    @ tommy.carstensen Я добавил для вас комментарии. – kilojoules 4 November 2016 в 15:51
  • 3
    Бесконечно благодарен! – tommy.carstensen 5 November 2016 в 13:01
  • 4
    Просто короткое нажатие: мне пришлось изменить метод от кубического до ближайшего или линейного, потому что кубик привел к большому количеству NaN, так как я работаю с небольшими значениями между 0..1 – Maikefer 9 February 2018 в 19:08
Другие вопросы по тегам:

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