|
1 | 1 | import copy |
| 2 | +import html |
2 | 3 | import pkg_resources |
3 | 4 | import warnings |
4 | 5 |
|
@@ -114,7 +115,9 @@ def update_content(self): |
114 | 115 |
|
115 | 116 | # font size for plot title (default size + 2) |
116 | 117 | size = "{}pt".format(QtGui.QFont().pointSize() + 2) |
117 | | - self.plot_layout.addLabel(lay["name"], colspan=3, size=size) |
| 118 | + self.plot_layout.addLabel(html.escape(lay["name"]), |
| 119 | + colspan=3, |
| 120 | + size=size) |
118 | 121 | self.plot_layout.nextRow() |
119 | 122 |
|
120 | 123 | self.plot_layout.addLabel(labely, angle=-90) |
@@ -328,7 +331,7 @@ def redraw(self, dslist, slot_states, plot_state): |
328 | 331 | # only one scatter plot |
329 | 332 | ss = slot_states[0] |
330 | 333 | self.setTitle("") # fake title |
331 | | - add_label(text=ss["name"], |
| 334 | + add_label(text=html.escape(ss["name"]), |
332 | 335 | anchor_parent=self.titleLabel.item, |
333 | 336 | color=ss["color"], |
334 | 337 | text_halign="center", |
@@ -586,23 +589,31 @@ def add_scatter(plot_item, plot_state, rtdc_ds, slot_state): |
586 | 589 |
|
587 | 590 | def get_axes_labels(plot_state, slot_states): |
588 | 591 | gen = plot_state["general"] |
589 | | - labelx = dclab.dfn.get_feature_label(gen["axis x"]) |
590 | | - labely = dclab.dfn.get_feature_label(gen["axis y"]) |
591 | | - # replace FL-? with user-defined names |
592 | | - fl_names = slot_states[0]["fl names"] |
593 | | - if labelx.count("FL"): |
594 | | - for key in fl_names: |
595 | | - if key in labelx: |
596 | | - labelx = labelx.replace(key, fl_names[key]) |
597 | | - break |
598 | | - if labely.count("FL"): |
599 | | - for key in fl_names: |
600 | | - if key in labely: |
601 | | - labely = labely.replace(key, fl_names[key]) |
602 | | - break |
| 592 | + # Use slot_states[0] because we only have one x-axis label |
| 593 | + labelx = get_axis_label_from_feature(gen["axis x"], slot_states[0]) |
| 594 | + labely = get_axis_label_from_feature(gen["axis y"], slot_states[0]) |
603 | 595 | return labelx, labely |
604 | 596 |
|
605 | 597 |
|
| 598 | +def get_axis_label_from_feature(feat, slot_state=None): |
| 599 | + """Return the axis label for plotting given a feature name |
| 600 | +
|
| 601 | + - replace the fluorescence names with user-defined strings |
| 602 | + from `slot_state["fl names"]` if `slot_state` is given |
| 603 | + - html-escape all characters |
| 604 | + """ |
| 605 | + label = dclab.dfn.get_feature_label(feat) |
| 606 | + # replace FL-? with user-defined names |
| 607 | + if slot_state is not None and "fl names" in slot_state: |
| 608 | + fl_names = slot_state["fl names"] |
| 609 | + if label.count("FL") and feat.startswith("fl"): |
| 610 | + for key in fl_names: |
| 611 | + if key in label: |
| 612 | + label = label.replace(key, fl_names[key]) |
| 613 | + break |
| 614 | + return html.escape(label) |
| 615 | + |
| 616 | + |
606 | 617 | def set_viewbox(plot, range_x, range_y, scale_x="linear", scale_y="linear", |
607 | 618 | padding=0): |
608 | 619 | # Set Log scale |
|
0 commit comments