在 pyqt5 中实现的 folium choropleth 图例中没有颜色,工具提示不显示

No color in folium choropleth legend implemented in pyqt5 and tooltips not showing

我在 pyqt5 中实现 folium 时遇到了 2 个问题 UI:

  1. 我的分区表中的图例显示了正确的数字,但图例中的颜色未显示。

  2. 我在下面列出的代码片段没有显示工具提示。

.json 和数据可以在这里找到:

两个问题的代码在这里:

from PyQt5.QtWebEngineWidgets import QWebEngineView
from PyQt5.QtWidgets import QApplication, QWidget, QFileDialog, QHBoxLayout, QVBoxLayout
from PyQt5 import QtCore, QtWidgets, QtWebEngineWidgets
import folium
import io
import pandas as pd
import os


class foliumWidget(QWidget):

    def __init__(self, parent = None):
        #super().__init__()
        QWidget.__init__(self, parent)

        layout = QVBoxLayout()
        self.setLayout(layout)

                  
        state_data = 'US_Unemployment_Oct2012.csv'
        us_geo = 'us-states.json'
        
        df = pd.read_csv(state_data, na_values=[" "])
     
        m = folium.Map(location=[48, -102], tiles="cartodbpositron", zoom_start=3)


        choropleth = folium.Choropleth(
            geo_data= us_geo,
            name="choropleth",
            data=df,
            columns=["State","Unemployment"],
            key_on="feature.id",
            fill_color="PuRd",
            fill_opacity=0.7,
            line_opacity=0.1,
            legend_name="Unemployment",
            reset=True,
        ).add_to(m)

        choropleth.geojson.add_child(
            folium.features.GeoJsonTooltip(['State'])
            )


        #folium.LayerControl().add_to(m)
        data = io.BytesIO()
        m.save(data, close_file=False)


        webView = QWebEngineView()
        webView.setHtml(data.getvalue().decode())
        layout.addWidget(webView)

OP 提供的代码中的一个错误是 GeoJsonTooltip 期望将 geojson 的字段作为字段,而不是 .csv,因此它会抛出异常。

消除你得到的冗余代码:

import io
import os
from pathlib import Path

from PyQt5.QtWidgets import QApplication, QVBoxLayout, QWidget
from PyQt5.QtWebEngineWidgets import QWebEngineView

import folium
import pandas as pd


class FoliumWidget(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)

        layout = QVBoxLayout(self)

        current_dir = Path(__file__).resolve().parent

        state_data = "US_Unemployment_Oct2012.csv"
        us_geo = "us-states.json"

        df = pd.read_csv(str(current_dir.joinpath(state_data)), na_values=[" "])
        m = folium.Map(location=[48, -102], tiles="cartodbpositron", zoom_start=3)

        choropleth = folium.Choropleth(
            geo_data=str(current_dir.joinpath(us_geo)),
            name="choropleth",
            data=df,
            columns=["State", "Unemployment"],
            key_on="feature.id",
            fill_color="PuRd",
            fill_opacity=0.7,
            line_opacity=0.1,
            legend_name="Unemployment",
            reset=True,
        ).add_to(m)

        choropleth.geojson.add_child(folium.features.GeoJsonTooltip(["name"]))

        webView = QWebEngineView()
        layout.addWidget(webView)

        data = io.BytesIO()
        m.save(data, close_file=False)
        webView.setHtml(data.getvalue().decode())


def main():
    import sys

    app = QApplication(sys.argv)

    widget = FoliumWidget()
    widget.show()

    sys.exit(app.exec_())


if __name__ == "__main__":
    main()