Django / Plotly-使用JS的Click事件

时间:2018-06-26 10:22:53

标签: javascript django plotly mouseclick-event

我可以使用Plotly简单显示我的绘图(3D散点图)。我正在尝试实现点击事件功能。当我点击任意一个绘图点时,我想更改其颜色。根据Plotly的官方文档,它并不难:Plotly - click event

我只能看到单击的点(控制台日志)。 有谁知道为什么我不能实时更改颜色?

先谢谢了。这是我的摘录:

模板:

{% extends 'base.html' %}

{% load static %}

{% block css %}
    <script src="{% static 'js/plotly-latest.min.js' %}"></script>
{% endblock %}

{% block content %}
    <div id="single_plot">
        {{ plot_as_div|safe }}
    </div>
{% endblock %}

{% block js %}
    <script src="{% static 'js/plot_select_markers.js' %}"></script>
{% endblock %}

plot_select_markers.js

$(document).ready(function () {
    var plot_div_id = $('#single_plot').children().attr('id');

    var plotly_scatter_div = document.getElementById(plot_div_id);

    var color_select = '#7b3294';

    plotly_scatter_div.on('plotly_click', function (data) {
        var pn = '', tn = '', colors = [];

        for (var i = 0; i < data.points.length; i++) {
            pn = data.points[i].pointNumber;
            tn = data.points[i].curveNumber;

            colors = data.points[i].data.marker.color;
        }

        colors[pn] = color_select;

        var update = {
            'marker': {
                color: colors,
                size: 7
            }
        };

        Plotly.restyle(plotly_scatter_div, update, [tn]);
    });

1 个答案:

答案 0 :(得分:0)

我不确定这是否与def cus_gen(batch_size,X,y): while True: X,y=shuffle(X,y) for i in range(len(X)//batch_size): yield (numpy.array(X[i*batch_size:(i+1)*batch_size]),numpy.array(y[i*batch_size:(i+1)*batch_size])) optimizer=adam(lr=0.001) model=Sequential() model.add(Embedding(input_dim=733,output_dim=60,input_length=12)) model.add(Bidirectional(LSTM(250,return_sequences=True,activation='relu'),merge_mode='concat')) Dropout(0.4) model.add(Bidirectional(LSTM(350,return_sequences=True,activation='relu'),merge_mode='concat')) Dropout(0.4) model.add(TimeDistributed(Dense(332, activation='sigmoid'))) model.compile(loss='cosine_proximity',optimizer=optimizer,metrics=['acc']) model.fit_generator(generator=cus_gen(40,X,y),steps_per_epoch=10000,epochs=100) 代码有关,但是从 messageBodyPart = new MimeBodyPart(); String filename = "/home/user/file.txt"; DataSource source = new FileDataSource(filename); messageBodyPart.setDataHandler(new DataHandler(source)); messageBodyPart.setFileName(filename); multipart.addBodyPart(messageBodyPart); // Send the complete message parts message.setContent(multipart); 开始,我为该问题创建了一个有效的示例。

注意:Django的{​​{1}}事件存在问题。使其进入plotly js code,此问题在以下Github Ticket中提出,我遵循了他们的临时解决方案,并使代码正常工作。

关于更新对象。

plotly_click

您可以将键定义为3D-charts,以指示第一个键需要更新为特定值。由于我们以编程方式设置对象的键,因此我将对象属性括在方括号(recursive loop)中。

还请注意,属性var update = { ["marker.color[" + pn + "]"]: color_select, ["marker.size[" + pn + "]"]: 7 }; marker.size[0]不能作为单个属性使用,因为要更新单个点的大小/颜色。因此,我使用了这个简单的模型函数["marker.color[" + pn + "]"],该函数将返回一个默认值的数组,其长度为size的数组。

color

请尝试以下代码,让我知道您的问题是否已解决!

setValue
z properties elements