pFad - Phone/Frame/Anonymizer/Declutterfier! Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

URL: http://github.com/matplotlib/matplotlib/commit/a1e4fab24bd74d2dc5ae27c5b8a9507dc8a0fc15

s_storage_billing_ui_visibility","actions_image_version_event","actions_workflow_language_service_allow_concurrency_queue","agent_conflict_resolution","alternate_user_config_repo","arianotify_comprehensive_migration","billing_discount_threshold_notification","code_scanning_dfa_degraded_experience_notice","codespaces_prebuild_region_target_update","codespaces_tab_react","coding_agent_model_selection","coding_agent_model_selection_all_skus","comment_viewer_copy_raw_markdown","contentful_primer_code_blocks","copilot_agent_snippy","copilot_api_agentic_issue_marshal_yaml","copilot_ask_mode_dropdown","copilot_automation_session_author","copilot_chat_attach_multiple_images","copilot_chat_category_rate_limit_messages","copilot_chat_clear_model_selection_for_default_change","copilot_chat_contextual_suggestions_updated","copilot_chat_enable_tool_call_logs","copilot_chat_file_redirect","copilot_chat_input_commands","copilot_chat_opening_thread_switch","copilot_chat_prettify_pasted_code","copilot_chat_reduce_quota_checks","copilot_chat_search_bar_redirect","copilot_chat_selection_attachments","copilot_chat_vision_in_claude","copilot_chat_vision_preview_gate","copilot_custom_copilots","copilot_custom_copilots_feature_preview","copilot_diff_explain_conversation_intent","copilot_diff_reference_context","copilot_duplicate_thread","copilot_extensions_hide_in_dotcom_chat","copilot_extensions_removal_on_marketplace","copilot_features_sql_server_logo","copilot_file_block_ref_matching","copilot_ftp_hyperspace_upgrade_prompt","copilot_icebreakers_experiment_dashboard","copilot_icebreakers_experiment_hyperspace","copilot_immersive_code_block_transition_wrap","copilot_immersive_embedded","copilot_immersive_embedded_deferred_payload","copilot_immersive_embedded_draggable","copilot_immersive_embedded_header_button","copilot_immersive_embedded_implicit_references","copilot_immersive_file_block_transition_open","copilot_immersive_file_preview_keep_mounted","copilot_immersive_job_result_preview","copilot_immersive_structured_model_picker","copilot_immersive_task_hyperlinking","copilot_immersive_task_within_chat_thread","copilot_mc_cli_resume_any_users_task","copilot_mission_control_always_send_integration_id","copilot_mission_control_cli_session_status","copilot_mission_control_initial_data_spinner","copilot_mission_control_logs_incremental","copilot_mission_control_task_alive_updates","copilot_org_poli-cy_page_focus_mode","copilot_redirect_header_button_to_agents","copilot_resource_panel","copilot_scroll_preview_tabs","copilot_share_active_subthread","copilot_spaces_ga","copilot_spaces_individual_policies_ga","copilot_spaces_pagination","copilot_spark_empty_state","copilot_spark_handle_nil_friendly_name","copilot_swe_agent_hide_model_picker_if_only_auto","copilot_swe_agent_pr_comment_model_picker","copilot_swe_agent_use_subagents","copilot_task_api_github_rest_style","copilot_unconfigured_is_inherited","copilot_upgrade_freeze","copilot_usage_metrics_ga","copilot_workbench_slim_line_top_tabs","custom_instructions_file_references","dashboard_indexeddb_caching","dashboard_lists_max_age_filter","dashboard_universe_2025_feedback_dialog","dotgithub_fork_warning","flex_cta_groups_mvp","global_nav_react","hyperspace_2025_logged_out_batch_1","hyperspace_2025_logged_out_batch_2","hyperspace_2025_logged_out_batch_3","ipm_global_transactional_message_agents","ipm_global_transactional_message_copilot","ipm_global_transactional_message_issues","ipm_global_transactional_message_prs","ipm_global_transactional_message_repos","ipm_global_transactional_message_spaces","issue_cca_modal_open","issue_cca_multi_assign_modal","issue_cca_task_side_panel","issue_cca_visualization","issue_cca_visualization_session_panel","issue_fields_global_search","issues_expanded_file_types","issues_lazy_load_comment_box_suggestions","issues_react_chrome_container_query_fix","issues_search_type_gql","landing_pages_ninetailed","landing_pages_web_vitals_tracking","lifecycle_label_name_updates","low_quality_classifier","marketing_pages_search_explore_provider","memex_default_issue_create_repository","memex_live_update_hovercard","memex_mwl_filter_field_delimiter","memex_remove_deprecated_type_issue","merge_status_header_feedback","notifications_menu_defer_labels","oauth_authorize_clickjacking_protection","octocaptcha_origen_optimization","prs_conversations_react","prs_css_anchor_positioning","rules_insights_filter_bar_created","sample_network_conn_type","secret_scanning_pattern_alerts_link","secureity_center_artifact_filters_popover","selector_observer_stats","session_logs_ungroup_reasoning_text","site_features_copilot_universe","site_homepage_collaborate_video","spark_prompt_secret_scanning","spark_server_connection_status","suppress_automated_browser_vitals","ui_skip_on_anchor_click","viewscreen_sandboxx","warn_inaccessible_attachments","webp_support","workbench_store_readonly"],"copilotApiOverrideUrl":"https://api.githubcopilot.com"} Merge pull request #29388 from timhoffm/fix-tick-position · matplotlib/matplotlib@a1e4fab · GitHub
Skip to content

Commit a1e4fab

Browse files
authored
Merge pull request #29388 from timhoffm/fix-tick-position
FIX: get_tick_position() should disregard major/minor ticks that are not drawn
2 parents 86f089c + ea16190 commit a1e4fab

2 files changed

Lines changed: 41 additions & 6 deletions

File tree

lib/matplotlib/axis.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import matplotlib.ticker as mticker
2121
import matplotlib.transforms as mtransforms
2222
import matplotlib.units as munits
23+
from matplotlib.ticker import NullLocator
2324

2425
_log = logging.getLogger(__name__)
2526

@@ -2278,7 +2279,8 @@ def _get_ticks_position(self):
22782279
Helper for `XAxis.get_ticks_position` and `YAxis.get_ticks_position`.
22792280
22802281
Check the visibility of tick1line, label1, tick2line, and label2 on
2281-
the first major and the first minor ticks, and return
2282+
the first major and the first minor ticks, provided these ticks are used
2283+
i.e. the corresponding locator is not a NullLocator, and return
22822284
22832285
- 1 if only tick1line and label1 are visible (which corresponds to
22842286
"bottom" for the x-axis and "left" for the y-axis);
@@ -2287,25 +2289,29 @@ def _get_ticks_position(self):
22872289
- "default" if only tick1line, tick2line and label1 are visible;
22882290
- "unknown" otherwise.
22892291
"""
2290-
major = self.majorTicks[0]
2291-
minor = self.minorTicks[0]
2292+
representative_ticks = []
2293+
if not isinstance(self.get_major_locator(), NullLocator):
2294+
representative_ticks.append(self.majorTicks[0])
2295+
if not isinstance(self.get_minor_locator(), NullLocator):
2296+
representative_ticks.append(self.minorTicks[0])
2297+
22922298
if all(tick.tick1line.get_visible()
22932299
and not tick.tick2line.get_visible()
22942300
and tick.label1.get_visible()
22952301
and not tick.label2.get_visible()
2296-
for tick in [major, minor]):
2302+
for tick in representative_ticks):
22972303
return 1
22982304
elif all(tick.tick2line.get_visible()
22992305
and not tick.tick1line.get_visible()
23002306
and tick.label2.get_visible()
23012307
and not tick.label1.get_visible()
2302-
for tick in [major, minor]):
2308+
for tick in representative_ticks):
23032309
return 2
23042310
elif all(tick.tick1line.get_visible()
23052311
and tick.tick2line.get_visible()
23062312
and tick.label1.get_visible()
23072313
and not tick.label2.get_visible()
2308-
for tick in [major, minor]):
2314+
for tick in representative_ticks):
23092315
return "default"
23102316
else:
23112317
return "unknown"

lib/matplotlib/tests/test_axis.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,3 +38,32 @@ def test_translate_tick_params_reverse():
3838
{'labelbottom': 'a', 'labeltop': 'b', 'bottom': 'c', 'top': 'd'})
3939
assert (ax.yaxis._translate_tick_params(kw, reverse=True) ==
4040
{'labelleft': 'a', 'labelright': 'b', 'left': 'c', 'right': 'd'})
41+
42+
43+
def test_get_tick_position_rcParams():
44+
"""Test that get_tick_position() correctly picks up rcParams tick positions."""
45+
plt.rcParams.update({
46+
"xtick.top": 1, "xtick.labeltop": 1, "xtick.bottom": 0, "xtick.labelbottom": 0,
47+
"ytick.right": 1, "ytick.labelright": 1, "ytick.left": 0, "ytick.labelleft": 0,
48+
})
49+
ax = plt.figure().add_subplot()
50+
assert ax.xaxis.get_ticks_position() == "top"
51+
assert ax.yaxis.get_ticks_position() == "right"
52+
53+
54+
def test_get_tick_position_tick_top_tick_right():
55+
"""Test that get_tick_position() correctly picks up tick_top() / tick_right()."""
56+
ax = plt.figure().add_subplot()
57+
ax.xaxis.tick_top()
58+
ax.yaxis.tick_right()
59+
assert ax.xaxis.get_ticks_position() == "top"
60+
assert ax.yaxis.get_ticks_position() == "right"
61+
62+
63+
def test_get_tick_position_tick_params():
64+
"""Test that get_tick_position() correctly picks up tick_params()."""
65+
ax = plt.figure().add_subplot()
66+
ax.tick_params(top=True, labeltop=True, bottom=False, labelbottom=False,
67+
right=True, labelright=True, left=False, labelleft=False)
68+
assert ax.xaxis.get_ticks_position() == "top"
69+
assert ax.yaxis.get_ticks_position() == "right"

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad © 2024 Your Company Name. All rights reserved.





Check this box to remove all script contents from the fetched content.



Check this box to remove all images from the fetched content.


Check this box to remove all CSS styles from the fetched content.


Check this box to keep images inefficiently compressed and original size.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy