Проблема с созданием случайно распределенных точек в пределах интервала из 2D-гистограммы.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Проблема с созданием случайно распределенных точек в пределах интервала из 2D-гистограммы.

Сообщение Anonymous »

Моя цель — создать диаграмму рассеяния на основе двумерной гистограммы, где, если интервал имеет счетчик n, то в границах интервала случайным образом генерируются n точек. Примерно так:
Изображение

Однако у меня возникла проблема с созданием точек внутри границ интервала для более равномерного распределения. Например, следующая тепловая карта не создает диаграмму рассеяния, какой она должна быть.
2D-гистограмма:
Изображение

Я добавил код и вызовы функций ниже . Как я могу исправить свой код, чтобы он правильно генерировал баллы?

Код: Выделить всё

def repopulateScatterHelper(x,y,m):
"""
generate a random point within bounds
"""
# compute x and y axis min and max
maxX = max(xedges) #the max x value from edges
maxY = max(yedges)

minX = min(xedges)
minY = min(yedges)

# compute bin boundaries
x1 = float(x)/m * (maxX-minX) + minX
x2 = float(x+1)/m *(maxX-minX) + minX

y1 = float(y)/m * (maxY-minY) + minY
y2 = float(y+1)/m * (maxY-minY) + minY

# generate random point within bin boundaries
the_x = uniform(x1, x2)
the_y = uniform(y1, y2)
return the_x, the_y
# enddef

def repopulateScatter(H, m):
"""
@params
H - 2D array of counts
m - number of bins along each axis
@returns
new_x, new_y - Generated corresponding x and y coordinates of points

"""
new_x = []
new_y = []
for i in range(0,m): # rows
for j in range(0,m): #columns
if H[i][j] > 0: # if count is greater than zero, generate points
for point in range(0, int(H[i][j])):
x_i, y_i = repopulateScatterHelper(i,j,m)
new_x.append(x_i)
new_y.append(y_i)
#endfor
#endif
#endfor
#endfor

return new_x,new_y
#enddef

def plotHistToScatter(new_x, new_y):
"""
new_x, new_y - x,y coordinates to plot
"""
new_x = np.array(new_x)
new_y = np.array(new_y)

# plot data points
fig, ax = plt.subplots()
ax.scatter(new_x,new_y)

# add LOBF to plot  - https://www.statology.org/line-of-best-fit-python/
a, b = np.polyfit(new_x,new_y, 1)
a = float(a)

plt.plot(new_x, a*new_x+b, color = "red")
print("DP LOBF:", a , "*(x) +" , b)

# label the plot
plt.xlabel(xAxisLabel)
plt.ylabel(yAxisLabel)
plt.title("heatmap to scatterplot for " + xAxisLabel + ' vs ' + yAxisLabel + "epsilon =" + str(epsilon))

plt.show()
#enddef
Мои вызовы функций:

Код: Выделить всё

H, xedges, yedges = np.histogram2d(df[xAxisLabel],df[yAxisLabel], bins=(m, m)) # plot 2D histogram
new_x,new_y = repopulateScatter(H,m)
plotHistToScatter(new_x, new_y)
Я пытался изменить функцию repopulateScatterHelper(), чтобы исправить это, но безуспешно.

Подробнее здесь: https://stackoverflow.com/questions/767 ... 2d-histogr
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Сгенерируйте случайную выборку точек, распределенных на поверхности единичной сферы.
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Matplotlib: Как сделать так, чтобы две гистограммы имели одинаковую ширину интервала?
    Anonymous » » в форуме Python
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Проблема с созданием гистограммы
    Anonymous » » в форуме Python
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Проблема с созданием гистограммы
    Anonymous » » в форуме Python
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • В чем разница между созданием экземпляра производного объекта как базового типа и созданием его экземпляра как производн
    Anonymous » » в форуме C#
    0 Ответы
    31 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»