python-visualization / python-visualization/folium

FeatureGroupSubGroup: nth level subgroups

Đang mở
#1,758 1 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

More info needed
Ngôn ngữ chính
Python
Star
7.4k
Fork
2.3k
Merge trung bình
17 giờ 22 phút
Pull request đã merge (30 ngày)
11

Mô tả

Describe the bug
I am using quite a few levels of recursion to generate a map that has subgroups within subgroups, and im not sure how to fix the issue, or if there is a better method.

To Reproduce
theres alot going on here... the repeated for loops are to keep the buttons ordered by hierarchy.

import folium
from folium import plugins

#####################################################################################
coord = df['Location'].apply(fetch_lat_lon)
df['Lat'] = coord.apply(lambda x: x[0] if isinstance(x, tuple) else None)
df['Long'] = coord.apply(lambda x: x[1] if isinstance(x, tuple) else None)

df['Result'] = (~df['Impounded'].isna().astype(int)).apply(lambda x: _results[x])
df['Interval'] = (datetime.now() - df.index).days
df['Weekday'] = df.index.weekday.map(lambda x: _days[x])
df['Time'] = df.index.hour

df = df[~df['ID'].isna()]                                                           
#####################################################################################
m = folium.Map(location=[0, 0], zoom_start=14)


results = {}
intervals = {}
days = {}
times = {}

_results = ['Complete', 'Canceled']
_intervals = [7, 30, 90, 365] ## days before now
_days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
_times = range(24)

for result in _results:

    results[result] = folium.FeatureGroup(name = result)
    m.add_child(results[result])

for result in _results:
    for interval in _intervals: 

        intervals[f'{result}_{interval}'] = plugins.FeatureGroupSubGroup(results[result], f'{interval} Days')
        m.add_child(intervals[f'{result}_{interval}'])

for result in _results:
    for interval in _intervals: ## days before now
        for day in _days:

            days[f'{result}_{interval}_{day}'] = plugins.FeatureGroupSubGroup(intervals[f'{result}_{interval}'], day)
            m.add_child(days[f'{result}_{interval}_{day}'])

for result in _results:
    for interval in _intervals: ## days before now
        for day in _days:
            for time in _times:
                
                if time < 12:
                    if time !=0:
                        times[f'{result}_{interval}_{day}_{time}'] = plugins.FeatureGroupSubGroup(days[f'{result}_{interval}_{day}'], f'{time} AM')
                        m.add_child(times[f'{result}_{interval}_{day}_{time}'])
                    else: 
                        times[f'{result}_{interval}_{day}_{time}'] = plugins.FeatureGroupSubGroup(days[f'{result}_{interval}_{day}'], f'{time + 12} AM')
                        m.add_child(times[f'{result}_{interval}_{day}_{time}'])
                elif time > 12:
                    times[f'{result}_{interval}_{day}_{time}'] = plugins.FeatureGroupSubGroup(days[f'{result}_{interval}_{day}'], f'{time - 12} PM')
                    m.add_child(times[f'{result}_{interval}_{day}_{time}'])
                else:
                    times[f'{result}_{interval}_{day}_{time}'] = plugins.FeatureGroupSubGroup(days[f'{result}_{interval}_{day}'], f'{time} PM')
                    m.add_child(times[f'{result}_{interval}_{day}_{time}'])

for result in _results:
    for interval in _intervals: ## days before now
        for day in _days:
            for time in _times:

                group = times[f'{result}_{interval}_{day}_{time}']

                condition = ((df['Result'] == result) &
                             (df['Interval'] <= interval) &
                             (df['Weekday'] == day) &
                             (df['Time'] == time)
                )

                _df = df[condition].dropna()

                for i in range(len(_df)):
                    lat = _df['Lat'].iloc[i] - _df['Lat'].mean()
                    long = _df['Long'].iloc[i] - _df['Long'].mean()

                    folium.Marker([lat, long]).add_to(group)
            
folium.LayerControl(collapsed=True).add_to(m)

m.save('TESTING.html')

Expected behavior
When all button conditions are met, points will display,

Environment (please complete the following information):

  • chrome
  • jupyter notebooks
  • vs code

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Hướng nghiên cứu

Bắt đầu với cấu trúc FeatureGroupSubGroup được cung cấp và TESTING.html được tạo trong bản tái hiện Jupyter/VS Code; xác minh xem các nhóm con lồng nhau vượt quá một cấp có được biểu diễn và chuyển đổi như mong đợi hay không. Xác định hành vi mong muốn cho cấp thứ n và xác nhận hành vi đó bằng một bản tái hiện bản đồ tối thiểu, bao gồm điều kiện hiển thị điểm đã nêu.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
jupyter-notebook, python
Lĩnh vực
data-visualization
Loại issue
Tính năng
Độ khó
5/5
Thời gian dự kiến
Hơn một tuần
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Cần làm rõ
Mức phù hợp với người mới
25/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.